Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

величко / л.р. 8 / ответы2

.doc
Скачиваний:
8
Добавлен:
23.02.2015
Размер:
50.69 Кб
Скачать

Ответы:

Задание 3. Определяю список заказчиков, заказавших за один раз более 300 единиц товара.

  1. Для каждого заказа нам требуется получить общее количество товара, для этого потребуется составить связанный подзапрос.

  2. Для того чтобы перед именами полей не писать каждый раз полное название таблиц, удобно воспользоваться псевдонимами. В данном случае определим следующие псевдонимы: для таблицы SalesOrderHeader псевдоним oh, а для SalesOrderDetailod.

  3. Результирующий код будет выглядеть следующим образом:

SELECT SalesOrderID, CustomerID

FROM Sales.SalesOrderHeader oh

WHERE 300<(SELECT sum(OrderQty)

FROM Sales.SalesOrderDetail od WHERE od.SalesOrderID=oh.SalesOrderID)

Задание 4. Для каждого товара отображаю сведения о самом крупном его заказе: количество заказанного товара и номер заказа.

  1. Для выполнения задания необходимо использовать внутреннее соединение таблиц Product и SalesOrderDetail, а также связанный подзапрос, возвращающий для каждого товара его максимальный заказ.

  2. В запросе нам потребуется работа с таблицей SalesOrderDetail как во внешнем запросе, так и во внутреннем связанном подзапросе. Поэтому для данной таблицы мы создадим два псевдонима: od1 и od2.

  3. Результирующий код будет выглядеть следующим образом:

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. Определяю количество различных товаров в каждом заказе.

  1. Необходимо сгруппировать записи с одинаковым идентификационным номером заказа SalesOrderID и подсчитать количество записей в каждой группе по полю ProductID. Для этого можно использовать следующий запрос:

SELECT SalesOrderID, count(ProductID) AS [Количество]

FROM Sales.SalesOrderDetail

GROUP BY SalesOrderID

  1. Если для каждого заказа еще необходимо подсчитать и общее количество товаров в заказе, то запрос должен быть дополнен:

SELECT SalesOrderID,

count(ProductID) AS [Количество],

sum(OrderQty) as [Общее количество]

FROM Sales.SalesOrderDetail

GROUP BY SalesOrderID

Вывод: Я научился использовать агрегатные функции и раздел GROUP BY оператора SELECT для аналитической выборки данных.

Соседние файлы в папке л.р. 8