Oracle数据库中的group by逻辑是正确的吗?

htzpubme  于 2023-06-29  发布在  Oracle
关注(0)|答案(2)|浏览(88)

首先,我在Oracle数据库中执行了以下SQL语句:

select data,count(*) from table_a

数据库返回错误:ORA-00937:而不是单组群函数。这是好的,但后来,我修改了SQL如下:

select sum from (select data,count(*) as sum from table_a)

数据库执行成功,我不认为这是一个正确的方式。有谁知道这是否正确?
另外:伙计们,我只是想展示一下oracle数据库的问题,我知道什么是正确的,但我对第二个sql的结果感到困惑。

9w11ddsr

9w11ddsr1#

使第一个查询正确/有效的两种方法是:

SELECT data, COUNT(*) AS cnt
FROM table_a
GROUP BY data;

这将按每个data组聚合计数。如果你真的想让COUNT(*)在select子句中单独存在,那么可以使用以下命令:

SELECT COUNT(*) AS cnt
FROM table_a;

这里我们只是计算整个表中所有记录的数量。在这里也选择data没有任何意义,因为不清楚您希望显示的data值沿着整个表级计数。

8yparm6h

8yparm6h2#

如果你想得到每个唯一的data的计数,那么:

select data,
       count(*)
from   table_a
GROUP BY data;

或者如果你想计算所有的行:

select count(*)
from   table_a

如果你想得到所有的行和一个计数,那么使用一个分析函数而不是一个聚合函数:

select data,
       count(*) OVER (PARTITION BY data) AS count_per_data,
       count(*) OVER () AS total_count
from   table_a

第二个查询在语法上无效,因为内部查询没有GROUP BY子句。
fiddle

相关问题