Baza : Adventureworks
Ćwiczenie nr: 25
Treść ćwiczenia: Oblicz sumę zamówień o największej i najmniejszej wartości.
Polecenia/funkcje w zapytaniu: SELECT, FROM, SUM(), TOP, Aliasy, GROUP BY, ORDER BY
Rozwiązanie:
Zapytanie:
SELECT
(
SELECT TOP 1
SUM(D.OrderQty * D.UnitPrice)AS Suma
FROM
Sales.SalesOrderHeader Z JOIN Sales.SalesOrderDetail D
ON Z.SalesOrderID = D.SalesOrderID
GROUP BY
Z.SalesOrderID
ORDER BY
Suma DESC
)
+
(
SELECT TOP 1
SUM(D.OrderQty * D.UnitPrice)AS Suma
FROM
Sales.SalesOrderHeader Z JOIN Sales.SalesOrderDetail D
ON Z.SalesOrderID = D.SalesOrderID
GROUP BY
Z.SalesOrderID
ORDER BY
Suma
)
AS [SumaZamówień(Min.Max.)]
Zdanie wyjaśnienia
to zadanie możemy rozwiązać na dwa sposoby.
1. Uwzględniając kwotę rabatu
2. Nie uwzględniając kwotę rabatu.
Powyższe zapytania nie uwzględnia kwoty rabatu. Jeżeli chcielibyśmy ją uwzględnić musimy posłużyć się innymi kolumnami. Jeżeli interesuje nas cena za wszystkie sztuki danego produktu w zamówieniu, to musimy posłużyć się kolumną "LineTotal" z tabeli "Sales.SalesOrderDetail", obliczenia dla tej kolumny uzyskujemy ze wzoru:
UnitPrice * (1-UnitPriceDiscount) * OrderQty
gdzie:
UnitPrice – to cena sprzedaży za sztukę produtku,
UnitPriceDiscount – to kwota rabatu a
OrderQty – to ilość zamówionych produktów.
czyli reasumując LineTotal to wartość zamówienia dla pojedynczego produktu w zamówieniu (uzwględniająca rabat i ilość zamówionego produktu).
Jeżeli interesuje nas ogólna wartość zamówienia (z uwzględnieniem rabatu) to możemy posłużyć się kolumną "SubTotal" a tabeli "Sales.SalesOrderHeader". Ta kolumną przechowuje wartości obliczone za pomocą formuły SUM(SalesOrderDetail.LineTotal)
Wynik uruchomienia zapytania
Liczba rekordów: 1
Pobierz skrypt sql