PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

grouper par nécessaire dans l'instruction SQL count(*) ?

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.