Пример 36. Определить дату продажи максимальной партии товара.
SELECT Дата, Количество
FROM Сделка
WHERE Количество=(SELECT Max(Количество) FROM Сделка)
Во вложенном подзапросе определяется максимальное количество товара. Во внешнем подзапросе – дата, для которой количество товара оказалось равным максимальному. Необходимо отметить, что нельзя прямо использовать предложение WHERE Количество=Max(Количество), поскольку применять обобщающие функции в предложениях WHERE запрещено. Для достижения желаемого результата следует создать подзапрос, вычисляющий максимальное значение количества, а затем использовать его во внешнем операторе SELECT, предназначенном для выборки дат сделок, где количество товара совпало с максимальным значением.
Пример 37. Определить даты сделок, превысивших по количеству товара среднее значение и указать для этих сделок превышение над средним уровнем.
SELECT Дата, Количество,
Количество-(SELECT Avg(Количество)
FROM Сделка) AS Превышение
FROM Сделка
WHERE Количество>
(SELECT Avg(Количество)
FROM Сделка)
В приведенном примере результат подзапроса, представляющий собой среднее значение количества товара по всем сделкам вообще, используется во внешнем операторе SELECT как для вычисления отклонения количества от среднего уровня, так и для отбора сведений о датах.
Пример 38. Определить клиентов, совершивших сделки с максимальным количеством товара.
SELECT Клиент.Фамилия
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента
WHERE Сделка.Количество=
(SELECT Max(Сделка.Количество)
FROM Сделка)
Здесь показан пример использования подзапроса при выборке данных из разных таблиц.
Пример 39. Определить клиентов, в сделках которых количество товара отличается от максимального не более чем на 10%.
SELECT Клиент.Фамилия,
Сделка.Количество
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=
Сделка.КодКлиента
WHERE Сделка.Количество>=0.9*
(SELECT Max(Сделка.Количество)
FROM Сделка)
Покажем, как применяются подзапросы в предложении HAVING.
Пример 40. Определить даты, когда среднее количество проданного за день товара оказалось больше 20 единиц.
SELECT Сделка.Дата, Avg(Сделка.Количество) AS
Среднее_за_день
FROM Сделка
GROUP BY Сделка.Дата
HAVING Avg(Сделка.Количество)>20
За каждый день определяется среднее количество товара, которое сравнивается с числом 20. Добавим в запрос подзапрос.
Пример 41. Определить даты, когда среднее количество проданного за день товара оказалось больше среднего показателя по всем сделкам вообще.
SELECT Сделка.Дата,
Avg(Сделка.Количество)
AS Среднее_за_день
FROM Сделка
GROUP BY Сделка.Дата
HAVING Avg(Сделка.Количество)>
(SELECT Avg(Сделка.Количество)
FROM Сделка)
Внутренний подзапрос определяет средний по всем сделкам показатель, с которым во внешнем запросе сравнивается среднее за каждый день количество товара.