Vous devez être prudent lorsque vous utilisez GROUP BY
. Une fois que vous avez compris ce que GROUP BY
fait, vous connaîtrez le problème vous-même. Il fait une agrégation sur vos données ou en d'autres termes, il réduit vos données en effectuant une opération sur les entrées brutes et en créant un nouveau nombre réduit d'entrées sur lesquelles une fonction d'agrégation a été appliquée (SUM, COUNT, AVG, etc.)
Les champs que vous fournissez dans le GROUP BY
La clause représente le niveau d'agrégation/de cumul que vous recherchez.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Ici, vous essayez de faire l'agrégation à col1
niveau, ce qui signifie que pour chaque valeur distincte présente dans la colonne col1
, une opération sera effectuée sur d'autres colonnes que vous fournissez dans SELECT
clause(ici col2
,col3
) de sorte que dans la sortie, vous ayez des valeurs non répétitives dans col1
et quelques valeurs cumulées de col2
et col3
contre chaque col1
distinct valeur basée sur la fonction que vous appliquez (SUM, COUNT, AVG, etc.).
Comment appliquer cette fonction ? C'est ce qui manque dans votre requête ci-dessus. Pour le résoudre, vous devez appliquer une fonction d'agrégation sur les champs présents dans le SELECT
clause mais pas dans GROUP BY
clause. En prenant un exemple de SUM, essayez ceci :
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
OU pour une meilleure idée, en supprimant WHERE
filter et vérifier la sortie en exécutant :
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
De plus, la raison pour laquelle votre autre requête
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
travaillé est parce que vous n'avez pas besoin d'appliquer l'agrégation au champ (ici col2
) qui est présent dans le GROUP BY
clause.