Cette erreur est parfaitement logique. COUNT
est une fonction « agrégée ». Vous devez donc lui dire par quel champ agréger, ce qui est fait avec le GROUP BY
clause.
Celui qui a probablement le plus de sens dans votre cas serait :
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
Si vous seulement utilisez le COUNT(*)
clause, vous demandez de renvoyer le nombre complet de lignes, au lieu d'agréger par une autre condition. Votre recherche si GROUP BY
est implicite dans ce cas, on pourrait répondre par :"en quelque sorte" :si vous ne spécifiez rien, c'est un peu comme si vous demandiez :"regrouper par rien", ce qui signifie que vous obtiendrez un énorme agrégat, qui est la table entière.
Par exemple, en exécutant :
SELECT COUNT(*) FROM table;
vous montrera le nombre de lignes dans ce tableau, alors que :
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
vous montrera le nombre de lignes par valeur de col_a
. Quelque chose comme :
col_a | COUNT(*)
---------+----------------
value1 | 100
value2 | 10
value3 | 123
Vous devez également tenir compte du fait que le *
signifie compter tout . Y compris NULL
s! Si vous souhaitez compter une condition spécifique, vous devez utiliser COUNT(expression)
! Voir la documentation sur les fonctions d'agrégation
pour plus de détails sur ce sujet.