Tato chyba dává dokonalý smysl. COUNT
je „agregační“ funkce. Musíte mu tedy sdělit, podle kterého pole se má agregovat, což se provádí pomocí GROUP BY
klauzule.
Ten, který ve vašem případě pravděpodobně dává největší smysl, by byl:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
Pokud pouze použijte COUNT(*)
klauzule, žádáte o vrácení celého počtu řádků namísto agregace podle jiné podmínky. Váš dotaz, zda GROUP BY
je v takovém případě implicitní, lze odpovědět:"sort of":Pokud nic nespecifikujete, je to trochu jako ptát se:"group by nothing", což znamená, že dostanete jeden obrovský agregát, což je celá tabulka.
Například provedení:
SELECT COUNT(*) FROM table;
zobrazí počet řádků v této tabulce, zatímco:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
vám ukáže počet řádků na hodnotu col_a
. Něco jako:
col_a | COUNT(*)
---------+----------------
value1 | 100
value2 | 10
value3 | 123
Měli byste také vzít v úvahu, že *
znamená počítat vše . Včetně NULL
s! Pokud chcete počítat konkrétní podmínku, měli byste použít COUNT(expression)
! Viz dokumenty o agregačních funkcích
pro více podrobností o tomto tématu.