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.