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

величко / л.р. 8 / лист с печатью

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

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

Задание 1. Вычислить среднюю цену товаров.

  1. Для вычисления средней цены необходимо воспользоваться агрегатной функцией AVG.

  2. Агрегатная функция объединит значения поля ListPrice, так что следующий код вернет только одно число (рис. 8.1):

SELECT AVG(ListPrice) FROM Production.Product

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

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

Select CustomerID From Sales.SalesOrderHeader

Where OrderDate=(SELECT Max(OrderDate) From Sales. SalesOrderHeader)

  1. Для полного решения задачи выберем имена всех заказчиков из таблицы Person, которые присутствуют в списке, полученном в предыдущем пункте. Однако таблица Person не содержит поля CustomerID, поэтому придется еще соединить ее с таблицей Customer. Результирующий код будет выглядеть следующим образом:

SELECT FirstName + ' ' + LastName AS 'CustomerName'

FROM Person.Person

INNER JOIN Sales.Customer ON Customer.PersonID = Person.BusinessEntityID

WHERE CustomerID in

(SELECT CustomerID FROM Sales.SalesOrderHeader

WHERE OrderDate=(SELECT Max(OrderDate) FROM Sales. SalesOrderHeader))

Задание 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. Результирующий код будет выглядеть следующим образом:

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