avatar

Вложенные агрегатные функции или подзапрос в предложении FROM

Рейтинг 3.7 из 5. Голосов: 245
Den 6 лет назад
2
,

0


Ответы (2)

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений №1 по сообщениям
1026 Mar 10
6 лет назад
Вложенные агрегатные функции или подзапрос в предложении FROMНайти максимальное значение среди средних цен товара, посчитанных для каждого производителя отдельно.средние значения стоимости по производителям не сложно
CODE:
SELECT AVG(price) avg_priceFROM Product P JOIN PC ON P.model = PC.model GROUP BY maker;
Однако стандарт запрещает использовать подзапрос в качестве аргумента агрегатной функции, т.е. нельзя решить задачу следующим способом:
CODE:
SELECT MAX(SELECT AVG(price) avg_priceFROM Product P JOIN PC ON P.model = PC.model GROUP BY maker);
как это мможно решить?
отправить
+ 0

Krasavica
, Kiyv
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
803 Dec 13
6 лет назад
используйте подзапрос в предложении FROM:
CODE:
SELECT MAX(avg_price) FROM (SELECT AVG(price) avg_price FROM Product P JOIN PC ON P.model = PC.model GROUP BY maker ) X;
или с использованием оконных функций - эту задачу можно решить без подзапроса:
CODE:
SELECT DISTINCT MAX(AVG(price)) OVER () max_avg_price FROM Product P JOIN PC ON P.model = PC.model GROUP BY maker;
Обратите внимание, что оконные функции допускают использование агрегатной функции в качестве аргумента. Ключевое слово DISTINCT необходимо здесь, поскольку максимальное значение, подсчитанное по всему набору средних значений, будет «приписано» каждому производителю.
отправить
+ 0


Чтобы оставить комментарий войдите или зарегистрируйтесь