小编典典

count(*)SQL语句中是否需要“按组”?

sql

以下语句在我的数据库中有效:

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”的含义。

更新:

我感到困惑的原因是因为我经常看到count(*)如下情况:

select count(*) from my_schema.my_table

那里是 没有 group by说法。是否COUNT总是需要跟着 group bygroup by在这种情况下,该语句是否隐含?


阅读 349

收藏
2021-04-28

共1个答案

小编典典

这个错误是很合理的。COUNT是“聚合”函数。因此,您需要告诉它要汇总的字段,这是通过GROUP BY子句完成的。

在您的情况下,最有意义的选择可能是:

SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;

如果 使用该COUNT(*)子句,则要求返回完整的行数,而不是按其他条件进行汇总。GROUP BY在这种情况下,您对if的询问是否是隐式的,可以用以下方式回答:“ sort of”:如果您未指定任何内容,则有点像询问:“ group by
none”,这意味着您将获得一个巨大的总计,即整个桌子。

例如,执行:

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

您还应该考虑到*计算 一切
的手段。包括NULLs!如果要计算特定条件,则应使用COUNT(expression)!有关此主题的更多详细信息,请参阅有关Aggragate函数的文档

2021-04-28