Ответы:
Задание 3.
Определяю список заказчиков, заказавших
за один раз более 300 единиц товара.
Для каждого заказа
нам требуется получить общее количество
товара, для этого потребуется составить
связанный подзапрос.
Для того чтобы
перед именами полей не писать каждый
раз полное название таблиц, удобно
воспользоваться псевдонимами. В данном
случае определим следующие псевдонимы:
для таблицы SalesOrderHeader
псевдоним oh,
а для SalesOrderDetail
– od.
Результирующий
код будет выглядеть следующим образом:
SELECT
SalesOrderID, CustomerID
FROM
Sales.SalesOrderHeader oh
WHERE
300<(SELECT sum(OrderQty)
FROM
Sales.SalesOrderDetail od WHERE od.SalesOrderID=oh.SalesOrderID)
Задание 4. Для
каждого товара отображаю сведения о
самом крупном его заказе: количество
заказанного товара и номер заказа. Для
выполнения задания необходимо
использовать внутреннее соединение
таблиц Product
и SalesOrderDetail,
а также связанный подзапрос, возвращающий
для каждого товара его максимальный
заказ.
В запросе нам
потребуется работа с таблицей
SalesOrderDetail
как во внешнем запросе, так и во
внутреннем связанном подзапросе.
Поэтому для данной таблицы мы создадим
два псевдонима: od1
и od2.
Результирующий
код будет выглядеть следующим образом:
SELECT
Name, OrderQty, SalesOrderID
FROM
Production.Product p INNER JOIN Sales.SalesOrderDetail od1
ON
od1.ProductID=p.ProductID
WHERE
OrderQty = (SELECT Max(OrderQty)
FROM
Sales.SalesOrderDetail od2
WHERE
od1.ProductID=od2.ProductID)
Задание 5.
Определяю количество различных товаров
в каждом заказе.
Необходимо
сгруппировать записи с одинаковым
идентификационным номером заказа
SalesOrderID
и подсчитать количество записей в
каждой группе по полю ProductID.
Для этого
можно использовать следующий запрос:
SELECT
SalesOrderID, count(ProductID) AS [Количество]
FROM
Sales.SalesOrderDetail
GROUP BY SalesOrderID
Если для каждого
заказа еще необходимо подсчитать и
общее количество товаров в заказе, то
запрос должен быть дополнен:
SELECT
SalesOrderID,
count(ProductID)
AS [Количество],
sum(OrderQty)
as
[Общее количество]
FROM
Sales.SalesOrderDetail
GROUP BY SalesOrderID
Вывод:
Я научился использовать агрегатные
функции и раздел GROUP BY оператора SELECT
для аналитической выборки данных.