Detta fel är helt logiskt. COUNT
är en "aggregerad" funktion. Så du måste tala om för det vilket fält den ska aggregera efter, vilket görs med GROUP BY
klausul.
Det som förmodligen är mest vettigt i ditt fall skulle vara:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
Om du bara använd COUNT(*)
klausul ber du att returnera hela antalet rader, istället för att aggregera med ett annat villkor. Ditt uppdrag om GROUP BY
är underförstått i så fall, skulle kunna besvaras med:"typ av":Om du inte anger något är det lite som att fråga:"gruppera med ingenting", vilket betyder att du får ett enormt aggregat, vilket är hela tabellen.
Som ett exempel, exekvera:
SELECT COUNT(*) FROM table;
kommer att visa dig antalet rader i den tabellen, medan:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
kommer att visa dig antalet rader per värdet för col_a
. Något i stil med:
col_a | COUNT(*)
---------+----------------
value1 | 100
value2 | 10
value3 | 123
Du bör också ta hänsyn till att *
betyder att räkna allt . Inklusive NULL
s! Om du vill räkna ett specifikt tillstånd bör du använda COUNT(expression)
! Se dokumenten om aggregerade funktioner
för mer information om detta ämne.