Jusqu'à présent, j'ai écrit la fonction Aggregate suivie de la clause Group By pour trouver les valeurs basées sur SUM, AVG et d'autres fonctions Aggregate. J'ai un peu de confusion dans la clause Group By. Lorsque nous utilisons Aggregate fonctions quelles sont les colonnes que je dois spécifier dans la clause Group By. Sinon Existe-t-il un moyen d'utiliser les fonctions d'agrégation sans utiliser la clause Group By.
Toutes les colonnes de la clause SELECT qui n'ont pas d'agrégat doivent être dans le GROUP BY
Bien:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3
Bien aussi:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, col5, col6
Pas d'autres colonnes = pas de GROUP BY nécessaire
SELECT MAX(col4)
...
Ne fonctionnera pas:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2
Inutile:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, MAX(col4)
Avoir un agrégat (MAX, etc.) avec d'autres colonnes sans GROUP BY n'a aucun sens car la requête devient ambiguë.
Vous pouvez utiliser Select AGG () OVER () dans TSQL
SELECT *,
SUM(Value) OVER()
FROM Table
Il existe d'autres options pour Over comme Partition By si vous souhaitez regrouper:
SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table
Oui, vous pouvez utiliser un agrégat sans GROUP BY:
SELECT SUM(col) FROM tbl;
Cela retournera une seule ligne - la somme de la colonne "col" pour toutes les lignes de tbl (à l'exclusion des valeurs nulles).
Vous devez regrouper par colonnes qui ont pas des fonctions d'agrégation.
Vous pouvez éviter une clause group by si les colonnes all sélectionnées ont des fonctions d'agrégation appliquées.
Les colonnes qui ne sont pas présentes dans la fonction d'agrégation doivent apparaître sur la clause group by:
Select
Min(col1),
Avg(col2),
sum(col3)
from table
alors nous n'avons pas besoin de la clause group by, mais s'il y a une colonne qui n'est pas présente dans la fonction Aggregate, vous devez utiliser group by pour cette colonne.
Select
col1,
col2,
sum(col3)
from table
group by col1,col2
alors nous devons utiliser le groupe par pour la colonne col1 et col2
Vous omettez les colonnes de SELECT dans les fonctions d'agrégation, toutes les autres colonnes doivent exister dans la clause GROUP BY séparée par une virgule.
Vous pouvez avoir une requête avec des agrégats et aucun regroupement, tant que vous n'avez que des valeurs d'agrégation dans l'instruction SELECT