ProgrammationAnalyste de rapports (SQL Analyst)

Qu'est-ce qui distingue la fonction d'agrégation SUM() de la fonction de fenêtre SUM()? Dans quelles tâches est-il préférable d'utiliser des fonctions de fenêtre? Donnez un exemple.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

La fonction d'agrégation SUM() additionne les valeurs sur l'ensemble du groupe de lignes dans un ensemble de résultats, retournant une seule valeur pour chaque groupe (ou pour toute la requête). La fonction de fenêtre SUM() permet de calculer la somme sur une "fenêtre" de valeurs, définie dans le SELECT (via OVER()), tout en conservant chaque ligne dans le résultat et en accédant au résultat agrégé de sa propre "fenêtre". Cela est particulièrement utile pour obtenir des totaux intermédiaires par groupes.

Exemple de fonction d'agrégation :

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

Exemple de fonction de fenêtre :

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

Question piège

“Peut-on obtenir une somme cumulée (« courante ») sur une colonne uniquement avec la fonction d'agrégation GROUP BY?”

Réponse : Non! GROUP BY ne fournit que les agrégats finaux, la somme courante nécessite soit une fonction de fenêtre, soit des sous-requêtes complexes, qui sont plus compliquées et plus lentes.

Exemple :

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

Histoire

Dans le rapport sur les transactions, la somme courante a été réalisée par de nombreux sous-requêtes corrélées. Avec l'augmentation de la taille de la table, les performances ont chuté de plusieurs dizaines de fois. Passé à la fonction de fenêtre — tout est revenu à quelques secondes.


Histoire

Une tentative de réaliser une analyse complexe avec des résultats par groupes via GROUP BY a abouti à plusieurs étapes d'extraction et de traitement dans un logiciel externe. Les fonctions de fenêtre ont permis de générer le rapport nécessaire en une seule requête SQL.


Histoire

Un analyste a écrit une requête avec des fonctions de fenêtre, utilisant un PARTITION BY incorrect — les résultats pour différents groupes ont été mélangés. Conclusion — rapport déformé. Après correction du partitionnement par groupes, les données sont devenues correctes.