2011-04-07 65 views
6
SELECT MIN(retail) 
FROM books 
WHERE category = 'COMPUTER' 

工作正常,但是當我包括選擇像標題:ORA-00937:不是單組分組函數

SELECT MIN(retail), title 
FROM books 
WHERE category = 'COMPUTER' 

事實並非如此。爲什麼?如何使它工作?

+2

你會希望它做的,用簡單的英語具體是什麼? – 2011-04-08 17:34:58

+1

可能重複的[SQL不是單組功能](http://stackoverflow.com/questions/1795198/sql-not-a-single-group-group-function) – 2012-02-17 22:06:55

回答

8

里斯的答案是正確的,如果這是你的意思,但你可能想要的title(S)其中retail=MIN(retail),而且措辭暗示如何得到這個問題的答案:

SELECT title, retail 
FROM books 
WHERE category = 'COMPUTER' 
AND retail = (SELECT MIN(retail) FROM books WHERE category = 'COMPUTER') 

爲了減少重複,您可以使用一個WITH條款(如果你使用的是最新版本的SQL):

;WITH ComputerBooks AS (
    SELECT title, retail 
    FROM books 
    WHERE category = 'COMPUTER') 
SELECT title, retail 
FROM ComputerBooks 
WHERE retail = (SELECT MIN(retail) FROM ComputerBooks) 

Sample I used to confirm syntax.

+0

這就是我的意思。 – user490735 2011-04-14 20:14:25

+1

爲什麼需要這種重複的結構? – user490735 2011-04-14 20:16:42

+0

它看起來像我必須指定每個列的條件,然後更一般的條件(標題FROM書籍 WHERE category ='COMPUTER')被縮小爲更具體。但是爲什麼沒有語法允許從給定一個列的特定條件的檢索記錄中指定其他列? – user490735 2011-04-14 20:23:34

6

MIN適用於一組記錄,所以你需要告訴它你的意思是哪組記錄。

如果你的意思是爲每個標題,顯示最低零售的,那麼你需要:

SELECT MIN(retail), title FROM books 
WHERE category = 'COMPUTER' 
GROUP BY title