ORA-00937: не групповая функция для одной группы - PullRequest
6 голосов
/ 08 апреля 2011
SELECT MIN(retail)
FROM books
WHERE category = 'COMPUTER'

работает нормально, но когда я включаю заголовок в select вроде:

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

это не так.Зачем?Как заставить это работать?

Ответы [ 2 ]

8 голосов
/ 08 апреля 2011

Ответ Риса правильный, если вы это имеете в виду, но вы, возможно, хотели, чтобы 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)

Пример, который я использовал для подтверждения синтаксиса.

6 голосов
/ 08 апреля 2011

MIN относится к группе записей, поэтому вам нужно указать, какую группу записей вы имеете в виду.

Если вы имеете в виду для каждого названия, показывать минимальную розничную продажу, то вам нужно:

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