以下语句在我的数据库中有效:
select column_a, count(*) from my_schema.my_table group by 1;
但这不是:
select column_a, count(*) from my_schema.my_table;
我得到了错误:
错误:“ my_table.column_a”列必须出现在GROUP BY子句中或在聚合函数中使用
有用的注释:该线程:SQL子句“ GROUP BY 1”是什么意思? 讨论“ group by 1”的含义。
group by 1
我感到困惑的原因是因为我经常看到count(*)如下情况:
count(*)
select count(*) from my_schema.my_table
那里是 没有 group by说法。是否COUNT总是需要跟着 group by?group by在这种情况下,该语句是否隐含?
group by
COUNT
这个错误是很合理的。COUNT是“聚合”函数。因此,您需要告诉它要汇总的字段,这是通过GROUP BY子句完成的。
GROUP BY
在您的情况下,最有意义的选择可能是:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;
如果 仅 使用该COUNT(*)子句,则要求返回完整的行数,而不是按其他条件进行汇总。GROUP BY在这种情况下,您对if的询问是否是隐式的,可以用以下方式回答:“ sort of”:如果您未指定任何内容,则有点像询问:“ group by none”,这意味着您将获得一个巨大的总计,即整个桌子。
COUNT(*)
例如,执行:
SELECT COUNT(*) FROM table;
将显示该表中的行数,而:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;
将为您显示 每个 值的行 数col_a。就像是:
col_a
col_a | COUNT(*) ---------+---------------- value1 | 100 value2 | 10 value3 | 123
您还应该考虑到*计算 一切 的手段。包括NULLs!如果要计算特定条件,则应使用COUNT(expression)!有关此主题的更多详细信息,请参阅有关Aggragate函数的文档。
*
NULL
COUNT(expression)