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

Если в условиях поиска для вложенного запроса нужно указать агрегатную функцию, используется HAVING..

Пример. Определить покупателя, у которого средняя покупка больше средней покупки других покупателей, и среднее число покупки этого покупателя.

SELECT R1.POKUP, AVG(Rl.KOLVO) FROM RASHOD R1

GROUP BY R1.POKUP

HAVING AVG(R1.KOLVO) >= ALL (SELECT AVG(R2.KOLVO) FROM RASHOD R2 GROUP BY R2. POKUP)

Пример. Определить адрес покупателя, который приобрел наибольшее количество товаров.

SELECT P.* FROM POKUPATELI P

WHERE P.POKUP = (SELECT RR.POKUP FROM RASHOD RR GROUP BY RR.POKUP

HAVING SUM(RR.KOLVO) >= ALL (SELECT SUM(RRR.KOLVO) FROM RASHOD RRR GROUP BY RRR.POKUP))

Пример. Перечислить все товары, которые приобрел покупатель, купивший наибольшее количество товаров.

SELECT DISTINCT R.TOVAR FROM RASHOD R

WHERE R.POKUP = (SELECT RR.POKUP FROM RASHOD RR

GROUP BY RR.POKUP

HAVING SUM(RR.KOLVO) >= ALL (SELECT SUM(RRR.KOLVO)

FROM RASHOD RRR GROUP BY RRR.POKUP))

Пример. Перечислить стоимость единиц товаров, которые приобрел покупатель, купивший наибольшее количество товаров

SELECT DISTINCT R.TOVAR, T.ED_IZM, T.ZENA FROM RASHOD R, TOVARY T

WHERE T.TOVAR = R.TOVAR AND R.POKUP = (SELECT RR.POKUP

FROM RASHOD RR GROUP BY RR.POKUP

HAVING SUM(RR.KOLVO) >= ALL

(SELECT SUM(RRR.KOLVO)

FROM RASHOD RRR GROUP BY RRR.POKUP))


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: