ORA-00937:在oracle中不是单组组功能

use*_*699 2 sql oracle group-by

我有一个栏目表id,title,relation_key.我想获得count(*)相应relation_key专栏的标题.

我的表包含以下数据:

id           title          relation_key
55           title1111         10
56           title2222         10
57           MytitleVVV        20
58           MytitlleXXX       20
Run Code Online (Sandbox Code Playgroud)

我试过了:

select title,count(*)  from table  where relation_key=10 group by title
Run Code Online (Sandbox Code Playgroud)

但它只返回1排.我想要两个标题的记录relation_key=10

Luk*_*der 5

你可能想要这些方面的东西:

select title, count(*) over (partition by relation_key)
from table 
where relation_key = 10
Run Code Online (Sandbox Code Playgroud)

结果会产生:

title     | count
----------+------
title1111 | 2
title2222 | 2
Run Code Online (Sandbox Code Playgroud)

请注意,您不能选择不属于GROUP BYOracle子句的字段(与大多数其他数据库一样).

作为一般经验法则,如果您不想真正分组数据,则应避免分组,而只需使用聚合函数,例如count(*).通过添加一个子句,可以将Oracle的大多数聚合函数转换为窗口函数over(),从而无需使用GROUP BY子句.