Advertisement
shchuko

DBlab7

May 19th, 2019
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.40 KB | None | 0 0
  1. 1) Найти долю продаж каждого продукта (цена продукта * количество продукта), на каждый чек, в денежном выражении
  2.  
  3.     SELECT SalesOrderID
  4.         ,ProductID
  5.         ,LineTotal / SUM(LineTotal) OVER (PARTITION BY SalesOrderID)  AS 'ProductSalesShare'
  6.     FROM Sales.SalesOrderDetail
  7.  
  8.  
  9. 2) Найти долю затрат каждого покупателя, на каждый купленный им продукт, среди общих его затрат в данной сети магазинов. Можно использовать обобщенное табличное выражение.
  10.  
  11.     SELECT DISTINCT soh.CustomerID
  12.         ,sod.ProductID
  13.         ,SUM(sod.LineTotal) OVER(PARTITION BY soh.CustomerID, sod.ProductID) /
  14.             SUM(sod.LineTotal) OVER(PARTITION BY soh.CustomerID) AS 'ProductMoneyWasteShare'
  15.     FROM Sales.SalesOrderHeader AS soh
  16.     INNER JOIN Sales.SalesOrderDetail AS sod ON sod.SalesOrderID = soh.SalesOrderID
  17.  
  18.  
  19.  
  20. 3) Вывести на экран список продуктов, их стоимость, а тек же разницу между стоимостью этого продукта и стоимостью самого дешевого продукта в той же подкатегории, к которой относится продукт
  21.  
  22.     SELECT ProductID
  23.         ,ListPrice
  24.         ,ListPrice -
  25.             FIRST_VALUE(ListPrice) OVER(PARTITION BY ProductSubcategoryID ORDER BY ListPrice) AS 'DIFF'
  26.     FROM Production.Product
  27.  
  28. 4) Для одного выбранного покупателя вывести, для каждой покупки (чека), разницу, в деньгах, между этой и следующей покупкой.
  29.  
  30.     SELECT SalesOrderID
  31.         ,SubTotal
  32.         ,SubTotal - LEAD(SubTotal, 1, 0) OVER(ORDER BY OrderDate) AS 'DiffWithNextOrder'
  33.     FROM Sales.SalesOrderHeader
  34.     WHERE CustomerID = 1
  35.  
  36.  
  37. 5) Вывести следующую информацию: номер покупателя, номер чека этого покупателя, отсортированные по покупателям, номерам чека (по возрастанию). Третья колонка должна содержать в каждой своей строке сумму текущего чека покупателя и всем предыдущим чекам этого покупателя.
  38.  
  39.     SELECT CustomerID
  40.         ,SalesOrderID
  41.         ,SubTotal
  42.         ,SUM(SubTotal) OVER(
  43.             PARTITION BY CustomerID
  44.             ORDER BY SalesOrderID
  45.             RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  46.     FROM Sales.SalesOrderHeader
  47.     ORDER BY 1, 2
  48.  
  49. 6) Вывести три колонки: номер покупателя, номер чека покупателя (отсортированный по возрастанию даты чека), и искусственно введенный порядковый номер текущего чека, начиная с 1, для каждого покупателя.
  50.  
  51.     SELECT CustomerID
  52.         ,SalesOrderID
  53.         ,RANK() OVER(PARTITION BY CustomerID ORDER BY OrderDate)
  54.     FROM Sales.SalesOrderHeader
  55.  
  56. 7) Вывести номера продуктов, таких что, их цена выше средней цены продукта в подкатегории, которой относится продукт. Запрос реализовать двумя способами. В одном из решений допускается использование обобщенного табличного выражения.
  57.  
  58. Запрос 1
  59.     SELECT ProductID
  60.     FROM Production.Product AS pp1
  61.     WHERE ListPrice >
  62.         (SELECT AVG(ListPrice)
  63.         FROM Production.Product AS pp2
  64.         WHERE pp1.ProductSubcategoryID = pp2.ProductSubcategoryID)
  65.  
  66. Запрос 2
  67.     WITH SubcatAVGPrice (ProductSubcategoryID, AVGListPrice)  AS
  68.         (SELECT ProductSubcategoryID, AVG(ListPrice) AS AVGListPrice
  69.         FROM Production.Product AS pp2
  70.         GROUP BY ProductSubcategoryID)
  71.     SELECT ProductID
  72.     FROM Production.Product AS PP1
  73.     INNER JOIN SubcatAVGPrice AS SAVGP ON PP1.ProductSubcategoryID = SAVGP.ProductSubcategoryID
  74.     WHERE PP1.ListPrice > SAVGP.AVGListPrice
  75.  
  76. Запрос 3 (выводит NULL, там где ProductID не соответствует условию)
  77.     SELECT "ProductID" =
  78.         CASE
  79.             WHEN ListPrice > AVG(ListPrice) OVER (PARTITION BY ProductSubcategoryID) THEN ProductID
  80.             ELSE NULL
  81.         END
  82.     FROM Production.Product AS pp1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement