La clause SQL OVER () – quand et pourquoi est-elle utile?

En termes simples: la clause Over peut être utilisée pour sélectionner des valeurs non agrégées avec des valeurs agrégées.

Partition BY, ORDER BY inside, et ROWS ou RANGE font partie de la clause OVER () by.

partition by est utilisée pour partitionner les données, puis exécuter ces fenêtres, fonctions agrégées, et si nous ne le faisons pas. avoir une partition par l’ensemble de résultats alors est considéré comme une partition unique.

Soyons voir la syntaxe de base de la clause OVER

PARTITION BY: Il est utilisé pour partitionner des données et effectuer des opérations sur des groupes avec les mêmes données.

ORDER BY: Il est utilisé pour définir l’ordre logique des données dans les partitions. Lorsque nous ne spécifions pas de partition, l’ensemble de résultats est considéré comme une seule partition

: Ceci peut être utilisé pour spécifier quelles lignes sont censées être considérées dans une partition lors de l’exécution de l’opération.

Prenons un exemple:

Voici mon ensemble de données:

Alors laissez-moi exécuter différents scénarios et voir comment les données sont impactées et je passerai de la syntaxe difficile au simple un

Il suffit d’observer la partie sum_sal. Ici, j’utilise order by Salary et j’utilise « RANGE BETWEEN UNBOUNDED PRECEDING AND ACURRENT ROW ». Dans ce cas, nous n’utilisons pas de partition, donc toutes les données seront traitées comme une seule et nous passons une commande sur salaire.Et l’important ici est LIGNE PRÉCÉDENTE ET ACTUELLE NON LIMITÉE. Cela signifie que lorsque nous calculons la somme, de la ligne de départ à la ligne actuelle pour chaque ligne.Mais si nous voyons des lignes avec le salaire 5000 et le nom = « Pavan », idéalement, il devrait être 17000 et pour salaire = 5000 et nom = Mark, il devrait être 22000. Mais comme nous utilisons RANGE et dans ce cas, s’il trouve des s imilar, puis il les considère comme le même groupe logique et effectue une opération sur eux et attribue une valeur à chaque élément de ce groupe. C’est la raison pour laquelle nous avons la même valeur pour salaire = 5000. Le moteur est passé à Salaire = 5000 et Nom = Ron et a calculé la somme, puis l’a affecté à tous les salaires = 5000.

Donc, avec les RANGÉES ENTRE LA LIGNE PRÉCÉDENTE ET ACTUELLE NON LIMITÉE La différence concerne les éléments de même valeur au lieu de en les regroupant, il calcule SUM de la ligne de départ à la ligne actuelle et il ne traite pas les éléments avec la même valeur différemment comme RANGE

Ces résultats sont les mêmes que

C’est parce que Over (ordre par salaire) est juste un raccourci de Over (ordre par salaire PLAGE ENTRE UNBOUNDED PRECEDING ET ACURRENT ROW) Donc, partout où nous spécifions simplement Order by sans ROWS ou RANGE, cela prend RANGE BETWEEN UNBOUNDED PRECEDING ET ACURRENT ROW par défaut.

Remarque: Ceci s’applique uniquement aux fonctions qui acceptent réellement RANGE / ROW. Par exemple, ROW_NUMBER et quelques autres n’acceptent pas RANGE / ROW et dans ce cas , cela n’entre pas en ligne de compte.

Jusqu’à présent, nous avons vu que la clause Over avec un ordre par prend Range / ROWS et la syntaxe semble quelque peu hing comme ceci PLAGE ENTRE LIGNE PRÉCÉDENTE ET ACTUELLE NON LIMITÉE Et il calcule en fait jusqu’à la ligne actuelle à partir de la première ligne. Mais que se passe-t-il s’il veut calculer des valeurs pour toute la partition de données et l’avoir pour chaque colonne (c’est-à-dire de la 1ère ligne à la dernière ligne). Voici la requête pour cela

Au lieu de CURRENT ROW, je spécifie UNBOUNDED FOLLOWING qui demande au moteur de calculer jusqu’au dernier enregistrement de partition pour chaque ligne.

Maintenant à votre point sur ce qui est OVER () avec des accolades vides?

C’est juste un raccourci pour Over (ordre par salaire, RANGS ENTRE UNBOUNDED PRECEDING ET UNBOUNDED FOLLOWING)

Ici, nous spécifions indirectement pour traiter tous mes résultats comme une seule partition, puis effectuer des calculs du premier enregistrement au dernier enregistrement de chaque partition.

J’ai créé une vidéo à ce sujet et si vous êtes intéressé, vous pouvez la visiter. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

Merci, Pavan Kumar AryasomayajuluHTTP: //xyzcoder.github.io

Write a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *