Adventureworks 26. Oblicz średnią wartość zamówień.

Baza : Adventureworks

Zadanie nr: 26

Treść: Oblicz średnią wartość zamówień.

Polecenia/funkcje w zapytaniu: SELECT, FROM, AVG(), SUM(), Aliasy, GROUP BY


   


Rozwiązanie:

Tutaj kluczowe pytanie jest takie, czy chcemy obliczać wartość zamówienia ze zniżką czy bez?

Opcja 1. Ze zniżką.

Przy tej opcji także możemy podejść na dwa sposoby. Wartość wszystkich zamówień możemy obliczyć zliczając kolumnę 'LineTotal' w tabeli 'SalesOrderDetail' lub zliczając kolumnę 'SubTotal' w tabeli 'SalesOrderHeader'.

Poniżej 2 zapytania do sposobu 1, czyli zliczamy kolumnę 'LineTotal' w tabeli 'SalesOrderDetail'. Pierwsze zapytanie z wykorzystaniem funkcji SUM i COUNT, a drugie z wykorzystaniem funkcji SUM i AVG.

SELECT
     SUM(sub_query.wartoscPojedynczegoZamowienia)/ COUNT(*) AS [SredniaWartoscZamowienia(SUM and COUNT)]
FROM
(
SELECT
    SUM(OD.LineTotal)AS wartoscPojedynczegoZamowienia
FROM
    Sales.SalesOrderDetail OD
GROUP BY
    OD.SalesOrderID
)AS sub_query

 

SELECT
     AVG(sub_query.wartoscPojedynczegoZamowienia)AS [SredniaWartoscZamowienia(AVG)]
FROM
(
SELECT
    SUM(OD.LineTotal)AS wartoscPojedynczegoZamowienia
FROM
    Sales.SalesOrderDetail OD
GROUP BY
    OD.SalesOrderID
)AS sub_query

sql server adventureworks tutorial

Pobież skrypt tutaj

Poniżej zapytanie do sposobu 2, czyli zliczamy kolumnę 'SubTotal' w tabeli 'SalesOrderHeader'.

SELECT
    AVG(OH.SubTotal) AS [SredniaWartoscZamowienia]
FROM
    Sales.SalesOrderHeader OH

sql server adventureworks tutorial

Pobież skrypt tutaj

 

Opcja 2. Bez zniżki.

Tutaj musimy skorzystać z metody mnożenia ceny jednostkowej przez liczbę sztuk produktu w pozycji zamówienia.

SELECT
    AVG(sub_query.suma) AS SredniaWartoscZamowieniaBezZnizki
FROM
(    
SELECT
    SUM(OD.OrderQty*OD.UnitPrice) AS Suma
FROM
    Sales.SalesOrderDetail OD
GROUP BY
    OD.SalesOrderID    
    )AS sub_query   

sql server adventureworks tutorial

Pobież skrypt tutaj