2013-04-25 56 views
1

为什么此查询无法正常工作?分组方式:ORA-00937:不是单组功能

SELECT e.* 
FROM enrolled e 
FULL OUTER JOIN student s ON e.studentid = s.sid 
WHERE ((e.quarter = 'Fall') OR (e.quarter = 'Spring')) 
GROUP BY e.studentid 
HAVING count(e.studentid) == 1; 

错误出现这种情况:

ORA-00937:不是单组分组函数00937. 00000 - “不是一个单一群组功能” *原因:*操作:行错误:1列:8个

感谢,

+0

它给了我一个错误,说“缺少表达式” – 2013-04-25 05:06:30

+1

你正在使用'=='?你确定?不只是一个?你能告诉我们来自sql server的错误消息吗?顺便说一句,我会做与'IN'运算符where语句中的部分...'在哪里e.quarter IN('秋','春')' – 2013-04-25 05:07:28

+1

我正在做我在问题中发布的内容。这是它说:“ORA-00937:不是单组功能 00937. 00000 - ”不是单组功能“ *原因: *操作: 错误在行:1列:8” – 2013-04-25 05:09:12

回答

1

当你使用,你只能选择在“分组依据”使用的列“按组”。

您正在选择e。*。将其改为e.studentid。

及其having count(*) = 1。不是having count(*) ==1

4

正如Rene所说,您不能选择不在group by子句中的列。

如果你想选择这些列,但仅适用于studentid S作count(*) = 2一些critria你可以做这样的:

select * 
from 
(SELECT e.*, count(*) over (partition by e.studentid) cnt 
FROM enrolled e 
FULL OUTER JOIN student s ON e.studentid = s.sid 
WHERE ((e.quarter = 'Fall') OR (e.quarter = 'Spring')) 
) 
where cnt = 2 

或者

SELECT e.*, count(*) over (partition by e.studentid) cnt 
FROM enrolled e 
FULL OUTER JOIN student s ON e.studentid = s.sid 
WHERE ((e.quarter = 'Fall') OR (e.quarter = 'Spring')) 
    AND (select count(*) from enrolled i where i.studentid = e.studentid) = 2 

无论如何,你可以不做==只有=