ORA-00937:不是单组组功能

use*_*735 7 sql min

SELECT MIN(retail)
FROM books
WHERE category = 'COMPUTER'
Run Code Online (Sandbox Code Playgroud)

工作正常,但当我在选择中包含标题时:

SELECT MIN(retail), title
FROM books
WHERE category = 'COMPUTER'
Run Code Online (Sandbox Code Playgroud)

它没有.为什么?如何使它工作?

Mar*_*urd 9

Rhys的答案是正确的,如果这是你的意思,但你可能想要title(s)在哪里retail=MIN(retail),并且该措辞建议如何得到答案:

SELECT title, retail
FROM books
WHERE category = 'COMPUTER'
 AND retail = (SELECT MIN(retail) FROM books WHERE category = 'COMPUTER')
Run Code Online (Sandbox Code Playgroud)

要减少重复,您可以使用一个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)
Run Code Online (Sandbox Code Playgroud)

我用来确认语法的示例.


小智 6

MIN适用于一组记录,因此您需要告诉它您的意思是哪组记录.

如果你的意思是每个标题,显示最低零售价,那么你需要:

SELECT MIN(retail), title FROM books
WHERE category = 'COMPUTER'
GROUP BY title
Run Code Online (Sandbox Code Playgroud)