2011-08-30 65 views
0

我有一个Oracle SQL代码块可以工作。我发现我无法同时获得cert列和max(run_time)。Oracle SQL代码语法标准,错误“不是一个单独的组功能”

select 
    cert, 
    max(run_time) 
from 
    bond_films 
where title in 
(
'Casino Royale','On Her Majesty_s Secret Service','Licence to Kill' 
); 

我正在阅读SQL参考,它有以下语法,但我认为我的代码与语法匹配?

SELECT [column,] group_function(column) 
FROM table 
[WHERE condition] 
[GROUP BY group_by_expression] 
[HAVING group_condition] 
[ORDER BY column] ; 

有人可以解释这给我或建议一个消息来源说我不能像我这样写代码吗?

回答

2

您需要一个GROUP BY子句,因为您已包含cert列。如果您只完成了SELECT MAX(run_time),您将无需提供GROUP BY,因为您正在选择所有行的最大值。但是,由于您请求了另一列(cert),因此Oracle希望您可以检索每个不同的cert的最大值。

select 
    cert, 
    max(run_time) 
from 
    bond_films 
where title in ('Casino Royale','On Her Majesty_s Secret Service','Licence to Kill') 
GROUP BY cert; 
+0

Michael,谢谢您的建议。你能告诉我在哪里找到相关的语法,这样我知道我必须在这种情况下使用GROUP BY? – Dean

+0

@Dean对不起,我无法找到相关的Oracle文档,我只从经验中了解它。在这个例子中,MySQL不需要“GROUP BY”,并且将返回所有行,但是Oracle和其他人都需要它。 –