2013-04-25 57 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 

無論如何,你可以不做==只有=