Ten błąd ma sens. COUNT
jest funkcją „agregującą”. Musisz więc powiedzieć mu, przez które pole ma być agregowane, co odbywa się za pomocą GROUP BY
klauzula.
Ten, który prawdopodobnie ma największy sens w twoim przypadku, to:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
Jeśli tylko użyj COUNT(*)
prosisz o zwrócenie pełnej liczby wierszy, zamiast agregować według innego warunku. Twoje pytanie, jeśli GROUP BY
jest domniemana w takim przypadku, można odpowiedzieć:„rodzaj”:Jeśli nic nie określisz, to trochę tak, jak pytanie:„grupuj przez nic”, co oznacza, że otrzymasz jeden ogromny agregat, który jest całą tabelą.
Na przykład wykonanie:
SELECT COUNT(*) FROM table;
pokaże liczbę wierszy w tej tabeli, podczas gdy:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
pokaże liczbę wierszy na wartość col_a
. Coś takiego:
col_a | COUNT(*)
---------+----------------
value1 | 100
value2 | 10
value3 | 123
Należy również wziąć pod uwagę, że *
znaczy liczyć wszystko . W tym NULL
s! Jeśli chcesz policzyć określony warunek, powinieneś użyć COUNT(expression)
! Zobacz dokumentację dotyczącą funkcji agregujących
aby uzyskać więcej informacji na ten temat.