Delphi 3 и создание приложений баз данных

       

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


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

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

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 )

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

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)

)

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

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)

)

Пример.

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

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 )



Содержание раздела