Табличные подзапросы. (Количество_ед_товара – (SELECT Avg(Количество_ед_товара)) FROM Продажи) ASПревышение

HAVING

SELECT

SELECT

Дата, Количество_ед_товара,

(Количество_ед_товара – (SELECT Avg (Количество_ед_товара)) FROM Продажи) AS Превышение

FROM Продажи

WHERE Количество_ед_товара >

(SELECT Avg (Количество_ед_товара) FROM Продажи)

Пример 3. Вывести клиентов, совершивших сделки с максимальным количеством товара.

SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество

FROM Клиенты INNER JOIN Продажи

ON Клиенты.ID_Клиента = Продажи.Клиент

WHERE Продажи. Количество_ед_товара =

(SELECT Max (Количество_ед_товара)) FROM Продажи)

Пример 4. Вывести список клиентов, в сделках которых количество товара отличается от максимального не более чем на 10%.

SELECT Клиенты.Фамилия, Продажи.Количество_ед_товара

FROM Клиенты INNER JOIN Продажи

ON Клиенты.ID_Клиента = Продажи.Клиент

WHERE Продажи. Количество_ед_товара >

0.9 * (SELECT Max (Количество_ед_товара)) FROM Продажи)

Покажем, как применяются подзапросы в предложении HAVING

Пример 5. Определить даты, когда среднее количество проданного товара за день оказалось больше 20 единиц.

SELECT Дата, Avg (Количество_ед_товара) AS ‘Среднее’

FROM Продажи

GROUP BY Дата

HAVING Avg (Продажи. Количество_ед_товара)>20

Напомним, что при помощи HAVING отражаются все предварительно сгруппированные посредством GROUP BY блоки данных, удовлетворяющие заданным в HAVING условиям.

В приведенном запросе за каждый день определяется среднее количество товара, которое сравнивается с числом 20.

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

Дата, Avg (Продажи. Количество_ед_товара)) AS Среднее

FROM Продажи

GROUP BY Дата

Avg( Количество_ед_товара)) > (SELECT Avg (Количество_ед_товара) FROM Продажи)

Здесь внутренний подзапрос определяет средний по сделкам показатель, с которым во внешнем запросе сравнивается среднее за каждый день количество товара.

Во многих случаях значение, подлежащее сравнению в предложениях WHERE и HAVING, представляет собой не одно, а несколько значений.

Подзапросы генерируют виртуальную таблицу (непоименованное промежуточное отношение), которое может использоваться только в том месте, где оно появляется в подзапросе.

К такому отношению невозможно обратиться по имени из какого либо другого места запроса.

Какие операции можно применять к такому промежуточному множеству:

1. { WHERE | HAVING } <выражение> [ NOT ] IN <подзапрос>;

2. { WHERE | HAVING } <выражение> оператор сравнения { ALL | SOME | ANY } <подзапрос>;

3. { WHERE | HAVING } [ NOT ] IN EXISTS <подзапрос>;


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



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