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