ORA-00937: не групповая функция с одной группой

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

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

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

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


person user490735    schedule 07.04.2011    source источник
comment
Что конкретно вы хотели бы, чтобы он делал на простом английском языке?   -  person Lasse V. Karlsen    schedule 08.04.2011
comment
возможный дубликат SQL, а не групповой функции с одной группой   -  person Jim Garrison    schedule 18.02.2012


Ответы (2)


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

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

person Mark Hurd    schedule 08.04.2011
comment
Зачем нужны такие дублирующие конструкции? - person user490735; 15.04.2011
comment
Похоже, мне нужно указать условие для каждого столбца, а затем более общее условие (название ИЗ книг, ГДЕ категория = «КОМПЬЮТЕР») сужается до более конкретного. Но почему бы не использовать синтаксис, позволяющий указать другие столбцы из полученной записи при определенных условиях для одного столбца? - person user490735; 15.04.2011

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

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

SELECT MIN(retail), title FROM books
WHERE category = 'COMPUTER'
GROUP BY title
person Rhys Gibson    schedule 08.04.2011