Tagi: group by

Zadanie 16.

Wykorzystamy tabelę wynikową uzyskaną w zadaniu 15.

1. Powyższą tabelę przekształć do postaci wspólnego wyrażenia tablicowego (CTE), nazwanego Tab.

2. W kwerendzie zewnętrznej wybierz “20% najcenniejszych klientów”: nazwę firmy, łączną wartość zamówień złożonych przez daną firmę oraz łączną wartość wszystkich zamówień złożonych przez wszystkich klientów. Interesuje nas tylko 20% firm z najwyższymi łącznymi wartościami zamówień.

Baza: Northwind, Tabele: CTE Tab, dbo.order Subtotals, Kolumny: CompanyName, Subtotal, Wynik: 18 rows

s16

 

 

 

 

Rozwiązanie

WITH Tab AS (
SELECT o.OrderID, c.CompanyName, os.Subtotal
FROM dbo.Orders as o JOIN dbo.Customers as c on o.CustomerID = c.CustomerID
JOIN dbo.[Order Subtotals] as os on o.OrderID = os.OrderID
)

SELECT TOP (20) PERCENT CompanyName, SUM(Subtotal) as 'CustSum', ( SELECT SUM(Subtotal) FROM dbo.[Order Subtotals] ) as TotalSum
FROM Tab
GROUP BY CompanyName
ORDER BY CustSum DESC;

[collapse]

Zadanie 13.

1. Utwórz zapytanie, które z tabeli Order Details zwróci numer zamówienia oraz jego łączną wartość (suma).

2. Powyższe zapytanie przekształć do postaci tabeli pochodnej; w kwerendzie zewnętrznej wybierz numer zamówienia, sumę oraz ID klienta dla zamówień, których wartość wynosi conajmniej 10 000. (Uwaga: potrzebne będzie złączenie z tabelą dbo.Orders)

Baza: Northwind, Tabele: dbo.Order Details, dbo.Order, Kolumny: OrderID, UnitPrice, Quantity, Wynik: 14 rows

s13

 

 

 

 

Rozwiązanie

SELECT Tab.OrderID, Tab.suma, Ord.CustomerID
FROM (
SELECT OrderID, SUM(UnitPrice*Quantity) as suma
FROM dbo.[Order Details]
GROUP BY OrderID) as Tab JOIN dbo.Orders as Ord on Tab.OrderID = Ord.OrderID
WHERE suma >= 10000
ORDER BY suma DESC;

[collapse]

Zadanie 12.

1. Stwórz zapytanie, które pokaże nam najczęściej zamawiane produkty.

2. Powyższe zapytanie przekształć do postaci tabeli pochodnej; w kwerendzie zewnętrznej wybierz 15 najczęściej zamawianych produktów. (Uwaga: więcej niż jeden produkt może być zamówiony daną ilość razy)

Baza: Northwind, Tabela: dbo.Order Details, Kolumny: ProductID, OrderID, Wynik: 17 rows

s12

 

 

 

 

 

Rozwiązanie

SELECT TOP(15) WITH TIES *
FROM (
SELECT ProductID, COUNT(OrderID) as Ordrs
FROM dbo.[Order Details]
GROUP BY ProductID
) as Tab
ORDER BY Ordrs DESC;

[collapse]

Zadanie 29.

Dla każdego klienta pokaż datę oraz numer pierwszego złożonego zamówienia.

Baza: Northwind, Tabela: dbo.Orders, Kolumny: CustomerID, OrderID, OrderDate, Wynik: 89 rows

p29

Rozwiązanie

SELECT CustomerID, MIN(OrderID) as FirstOrder, MIN(OrderDate) as FirstOrderDate
FROM dbo.Orders
GROUP BY CustomerID;

[collapse]

Zadanie 5.

Pokaż pierwsze i ostatnie zamówienie dla klientów z Niemiec.

Baza: Northwind, Tabele: dbo.Orders, dbo.Customers, Kolumny: CustomerID, OrderID, Country, Wynik: 11 rows

s5

Rozwiązanie

SELECT CustomerID, MIN(OrderID) as FirstOrder, MAX(OrderID) as LastOrder
FROM dbo.Orders
GROUP BY CustomerID
HAVING CustomerID in (SELECT CustomerID FROM dbo.Customers WHERE Country = 'Germany')
ORDER BY CustomerID;

[collapse]

Zadanie 3.

Pokaż klientów, którzy w 1996 roku nie złożyli żadnego zamówienia, ale złożyli je później. Zadanie rozwiąż na dwa różne sposoby.

Baza: Northwind, Tabela: dbo.Orders, Kolumny: CustomerID, OrderDate, Wynik: 22 rows

s3

Rozwiązanie

1) z grupowaniem:

SELECT CustomerID
FROM dbo.Orders
GROUP BY CustomerID
HAVING MIN(OrderDate) >= '19970101';

2) z użyciem podzapytań:

SELECT DISTINCT O.CustomerID
FROM dbo.Orders as O
WHERE O.CustomerID not in (SELECT o1.CustomerID FROM dbo.Orders as o1 WHERE o1.OrderDate >= '19960101' AND o1.OrderDate < '19970101')
AND O.CustomerID in (SELECT o2.CustomerID FROM dbo.Orders as o2 WHERE o2.OrderDate >= '19970101')
ORDER BY O.CustomerID;

[collapse]

Zadanie 28.

Podsumuj pracę przewoźników: podlicz, ile zamówień obsłużyli w każdym roku. W wyniku zaznacz, na którym miejscu jest dany przewoźnik w ilości obsłużonych zamówień.

Baza: Northwind, Tabele: dbo.Orders, dbo.Shippers, Kolumny: CompanyName, OrderDate, ShipVia, ShipperID, Wynik: 9 rows

37

Rozwiązanie

SELECT ROW_NUMBER() OVER(PARTITION BY YEAR(O.OrderDate) ORDER BY COUNT(*) DESC) as Nr, S.CompanyName, YEAR(O.OrderDate) as Year, COUNT(*) as Orders
FROM dbo.Orders as O
JOIN dbo.Shippers as S on O.ShipVia = S.ShipperID
GROUP BY S.CompanyName, YEAR(O.OrderDate)
ORDER BY Year, Orders DESC;

[collapse]

Zadanie 23.

Policz, ile zamówień obsłużył każdy z pracowników; wyniki opisz jako przedziały: mniej niż 50, między 50 a 100, więcej niż 100.

Baza: Northwind, Tabela: dbo.Orders, Kolumny: EmployeeID, OrderID, Wynik: 9 rows

31

Rozwiązanie

SELECT EmployeeID,
CASE
WHEN COUNT(OrderID) < 50 THEN 'Mniej niż 50'
WHEN COUNT(OrderID) BETWEEN 50 AND 100 THEN 'Między 50 a 100'
WHEN COUNT(OrderID) > 100 THEN 'Więcej niż 100'
END AS Zamowienia
FROM dbo.Orders
GROUP BY EmployeeID
ORDER BY EmployeeID;

[collapse]

Zadanie 20.

Które produkty najlepiej się sprzedają? Wyznacz te, na które złożono ponad 40 zamówień.

Baza: Northwind, Tabele: dbo.Order Details, dbo.Products, Kolumny: OrderID, ProductID, ProductName, Wynik: 13 rows

25

Rozwiązanie


SELECT P.ProductID, P.ProductName, COUNT(OD.OrderID) as Zamowienia

FROM dbo.[Order Details] as OD

JOIN dbo.Products as P on OD.ProductID = P.ProductID

GROUP BY P.ProductID, P.ProductName

HAVING COUNT(OD.OrderID) >= 40

ORDER BY Zamowienia DESC;

[collapse]

Zadanie 19.

Wyznacz 5 klientów, którzy mają najwyższą wartość zamówień.

Baza: Northwind, Tabele: dbo.Customers, dbo.Orders, dbo.Order Details, Kolumny: CustomerID, CompanyName, Quantity, UnitPrice, Wynik: 5 rows

24

Rozwiązanie

SELECT C.CustomerID, C.CompanyName, SUM(OD.Quantity * OD.UnitPrice) as Suma FROM dbo.Customers as C

JOIN dbo.Orders as O on C.CustomerID = O.CustomerID

JOIN dbo.[Order Details] as OD on O.OrderID = OD.OrderID

GROUP BY C.CustomerID, C.CompanyName

ORDER BY Suma DESC

OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;

[collapse]
« Starsze wpsiy Recent Entries »