Использование агрегатных функций в подзапросах

Один тип функций, который автоматически может производить одиночное значение для любого числа строк, конечно же, — агрегатная функция.
Любой запрос, использующий одиночную функцию агрегата без предложения GROUP BY будет выбирать одиночное значение для использования в основном предикате. Например, вы хотите увидеть все порядки имеющие сумму приобретений выше средней на 4-е Октября ( вывод показан на Рисунке 10.3 ):
SELECT * FROM Orders WHERE amt > ( SELECT AVG (amt) FROM Orders WHERE odate = 10/04/1990 );

SQL Execution Log

SELECT *
FROM Orders
ORDER BY cnum DESC;

onum
amt
odate
cnum
snum

3006
1098.16
10/03/1990
2008
1007

3002
1900.10
10/03/1990
2007
1004

3008
4723.00
10/05/1990
2006
1001

3011
9891.88
10/06/1990
2006
1001

30010
1309.95
10/06/1990
2004
1002

3005
5160.45
10/03/1990
2003
1002

3009
1713.23
10/04/1990
2002
1003

Рисунок 10.3: Выбор всех сумм со значением выше средней на 10/04/1990 Средняя сумма приобретений на 4 Октября — 1788.98 ( 1713.23 + 75.75) делится пополяам, что в целом равняется = 894.49. Все строки со значением в поле amt выше этого — являются выбранными.
Имейте ввиду, что сгруппированные агрегатные функции, которые являются агрегатными функциями, определенными в терминах предложения GROUP BY, могут производить многочисленные значения. Они, следовательно, не позволительны в подзапросах такого характера. Даже если GROUP BY и HAVING используются таким способом, что только одна группа выводится с помощью подзапроса, команда будет отклонена в принципе. Вы должны использовать одиночную агрегатную функцию с предложением WHERE, что устранит нежелательные группы. Например, следующий запрос который должен найти среднее значение комиссионных продавца в Лондоне —
SELECT AVG (comm) FROM Salespeople GROUP BY city HAVlNG city = "London";
не может использоваться в подзапросе! Во всяком случае это не лучший способ формировать запрос. Другим способом может быть —
SELECT AVG (comm) FROM Salespeople WHERE city = " London ";
 

‹ Предикаты с подзапросами являются необратимыми
Вверх
Использование подзапросов, которые выдают много строк с помощью оператора IN ›

Айтистанция
Добавить комментарий

Adblock
detector