2011-08-30 64 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和其他人都需要它。 –