Тази грешка е напълно логична. COUNT
е "агрегирана" функция. Така че трябва да му кажете кое поле да агрегира, което се прави с GROUP BY
клауза.
Това, което вероятно има най-голям смисъл във вашия случай, би било:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
Ако само използвайте COUNT(*)
клауза, вие искате да върнете пълния брой редове, вместо агрегиране по друго условие. Вашето търсене, ако GROUP BY
е имплицитно в този случай, може да се отговори с:"вид":Ако не посочите нищо, е малко като да попитате:"групиране по нищо", което означава, че ще получите един огромен агрегат, който е цялата таблица.
Като пример, изпълнение на:
SELECT COUNT(*) FROM table;
ще ви покаже броя на редовете в тази таблица, докато:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
ще ви покаже броя на редовете на стойност на col_a
. Нещо като:
col_a | COUNT(*)
---------+----------------
value1 | 100
value2 | 10
value3 | 123
Също така трябва да имате предвид, че *
означава да преброиш всичко . Включително NULL
с! Ако искате да преброите конкретно условие, трябва да използвате COUNT(expression)
! Вижте документите за агрегатните функции
за повече подробности по тази тема.