Подчиненные запросы в предложении HAVING
Вложенные запросы могут использоваться также в предложении HAVING, когда требуется отобрать группу строк. Рассмотрим следующий пример, содержащий вложенный запрос в предложении HAVING. Вывести список служащих, у которых средняя стоимость заказов на товары, изготовленные компанией ВАЗ, выше, чем общая средняя стоимость заказов.
SELECT FAMILY, NAME, AVG(PRICE_ALL)
FROM SLUZHASCHIE S, ZAKAZY Z
WHERE S.ID_SLZH = Z.ID_SLZH AND Z.ID_MFR = `ВАЗ`
GROUP BY FAMILY, S.ID_SLZH
HAVING AVG(PRICE_ALL) >= (SELECT AVG(PRICE_ALL)
FROM ZAKAZY Z WHERE S.ID_SLZH = Z.ID_SLZH))
FAMILY | NAME | AVG(PRICE_ALL) |
Ганин | Сергей | |
Петров | Петр | |
Нилов | Лев |
Алгоритм выполнения запроса.
1. Вложенный запрос вычисляет среднюю стоимость по всем заказам.
2. Этот простой вложенный запрос вычисляет среднюю стоимость один раз, а затем многократно используется в предложении HAVING.
3. Главный запрос просматривает строки таблицы ZAKAZY, отыскивая все заказы на товары компании ВАЗ, и группирует их по именам служащих.
4. Предложение HAVING сравнивает среднюю стоимость по каждой группе товаров со средней стоимостью по всем заказам, вычисленной ранее.
5. Если средняя стоимость по группе больше, чем общая средняя стоимость, то данная группа строк сохраняется, если нет, то данная группа строк исключается.
6. Предложение SELECT создает для каждой группы итоговую строку, содержащую фамилию, имя и среднюю стоимость принятых ими заказов.
Описанный алгоритм выполнения запроса приведен на Рис. 4.2.
Рис. 4.2 - Выполнение вложенного запроса в предложении HAVING |
Дата добавления: 2015-02-03; просмотров: 801;