常规列旁边的Oracle SQL返回计数(*)列?

Xon*_*ron 3 sql oracle count

在Oracle SQL中,如何在常规列的旁边返回count(*)列?

什么有效:

select count(*) from TABLE where username = 'USERNAME';
Run Code Online (Sandbox Code Playgroud)

我想做什么:

select username,count(*) from TABLE where username = 'USERNAME';
Run Code Online (Sandbox Code Playgroud)

所以我想要计数旁边的用户名,将其扩展为另一个列出众多用户名和记录计数的查询.

错误:

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action:
Error at Line: 7 Column: 7
Run Code Online (Sandbox Code Playgroud)

题:

那么,我该怎么做?

Sea*_*son 11

SELECT username,count(*) from TABLE WHERE username='USERNAME' GROUP BY username
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩!

第一个查询起作用的原因是因为MySQL可以自动将该查询转换为聚合查询,因为它"理解"您要计算用户名='USERNAME'的所有行.第二个查询不够清楚 - 您正在尝试对查询选择的行执行聚合函数,但您还需要查询的行.我的查询清楚地表明您只希望从集合中返回一个用户名,因此聚合不是问题.

  • 我将过滤器留在`WHERE`中.我想优化器可能会推迟它,但为了以防万一. (5认同)
  • @MartinSmith同意,`WHERE`仍然更有意义 - 我更喜欢'HAVING`只用于聚合; 使目的更清楚. (2认同)