2011-04-07 58 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