Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1) Найти долю продаж каждого продукта (цена продукта * количество продукта), на каждый чек, в денежном выражении
- SELECT SalesOrderID
- ,ProductID
- ,LineTotal / SUM(LineTotal) OVER (PARTITION BY SalesOrderID) AS 'ProductSalesShare'
- FROM Sales.SalesOrderDetail
- 2) Найти долю затрат каждого покупателя, на каждый купленный им продукт, среди общих его затрат в данной сети магазинов. Можно использовать обобщенное табличное выражение.
- SELECT DISTINCT soh.CustomerID
- ,sod.ProductID
- ,SUM(sod.LineTotal) OVER(PARTITION BY soh.CustomerID, sod.ProductID) /
- SUM(sod.LineTotal) OVER(PARTITION BY soh.CustomerID) AS 'ProductMoneyWasteShare'
- FROM Sales.SalesOrderHeader AS soh
- INNER JOIN Sales.SalesOrderDetail AS sod ON sod.SalesOrderID = soh.SalesOrderID
- 3) Вывести на экран список продуктов, их стоимость, а тек же разницу между стоимостью этого продукта и стоимостью самого дешевого продукта в той же подкатегории, к которой относится продукт
- SELECT ProductID
- ,ListPrice
- ,ListPrice -
- FIRST_VALUE(ListPrice) OVER(PARTITION BY ProductSubcategoryID ORDER BY ListPrice) AS 'DIFF'
- FROM Production.Product
- 4) Для одного выбранного покупателя вывести, для каждой покупки (чека), разницу, в деньгах, между этой и следующей покупкой.
- SELECT SalesOrderID
- ,SubTotal
- ,SubTotal - LEAD(SubTotal, 1, 0) OVER(ORDER BY OrderDate) AS 'DiffWithNextOrder'
- FROM Sales.SalesOrderHeader
- WHERE CustomerID = 1
- 5) Вывести следующую информацию: номер покупателя, номер чека этого покупателя, отсортированные по покупателям, номерам чека (по возрастанию). Третья колонка должна содержать в каждой своей строке сумму текущего чека покупателя и всем предыдущим чекам этого покупателя.
- SELECT CustomerID
- ,SalesOrderID
- ,SubTotal
- ,SUM(SubTotal) OVER(
- PARTITION BY CustomerID
- ORDER BY SalesOrderID
- RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- FROM Sales.SalesOrderHeader
- ORDER BY 1, 2
- 6) Вывести три колонки: номер покупателя, номер чека покупателя (отсортированный по возрастанию даты чека), и искусственно введенный порядковый номер текущего чека, начиная с 1, для каждого покупателя.
- SELECT CustomerID
- ,SalesOrderID
- ,RANK() OVER(PARTITION BY CustomerID ORDER BY OrderDate)
- FROM Sales.SalesOrderHeader
- 7) Вывести номера продуктов, таких что, их цена выше средней цены продукта в подкатегории, которой относится продукт. Запрос реализовать двумя способами. В одном из решений допускается использование обобщенного табличного выражения.
- Запрос 1
- SELECT ProductID
- FROM Production.Product AS pp1
- WHERE ListPrice >
- (SELECT AVG(ListPrice)
- FROM Production.Product AS pp2
- WHERE pp1.ProductSubcategoryID = pp2.ProductSubcategoryID)
- Запрос 2
- WITH SubcatAVGPrice (ProductSubcategoryID, AVGListPrice) AS
- (SELECT ProductSubcategoryID, AVG(ListPrice) AS AVGListPrice
- FROM Production.Product AS pp2
- GROUP BY ProductSubcategoryID)
- SELECT ProductID
- FROM Production.Product AS PP1
- INNER JOIN SubcatAVGPrice AS SAVGP ON PP1.ProductSubcategoryID = SAVGP.ProductSubcategoryID
- WHERE PP1.ListPrice > SAVGP.AVGListPrice
- Запрос 3 (выводит NULL, там где ProductID не соответствует условию)
- SELECT "ProductID" =
- CASE
- WHEN ListPrice > AVG(ListPrice) OVER (PARTITION BY ProductSubcategoryID) THEN ProductID
- ELSE NULL
- END
- FROM Production.Product AS pp1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement