Zbiór zadań z SQL Serwer poziom I

Ćwiczenie 1. Oblicz wartość wszystkich zamówień w I kw. 1997 r.

Wskazówka: potrzebujemy dwóch tabel: [orders] i [order details]

 

 

select sum(unitPrice*quantity*(1-discount)) as Total 
from Orders o join [Order Details] d on o.OrderID=d.OrderID 
where OrderDate between '1997-01-01' and '1997-03-31'

 

Ćwiczenie 2. Jaki jest średni czas wysyłki ?

Wskazówka: średni czas wysyłki liczymy w dniach. Korzystamy z funkcji DATEDIFF i funkcji agregującej

 

 

select avg(DATEDIFF(day,OrderDate,ShippedDate))   from Orders;

 

Ćwiczenie 3.  Ile jest produktów bez litery „e” w nazwie ?

 

select  count(productID) from Products where ProductName not like '%e%';

 

Ćwiczenie 4. Oblicz wartość każdego zamówienia

 

select  sum(UnitPrice*Quantity*(1-Discount)) as Total,  OrderID  from [Order Details]
group by OrderID;

 

ale warto zaokrąglić wynik do dwóch miejsc po przecinku, przecież to jest cena !

select  round(sum(UnitPrice*Quantity*(1-Discount)),2) as Total,  OrderID  from [Order Details]
group by OrderID;

 

Ćwiczenie 5. Ile jest produktów na każdą literą alfabetu.

Wskazówka 1 : najpierw trzeba „wyciąć” pierwszą literę (LEFT) z nazwy każdego produktu.

Wskazówka 2: jeżeli w poleceniu SELECT jest funkcja agregująca i wyrażenie (lub kolumna/kolumny) to to wyrażenie (kolumna/kolumny)  muszą znaleźć się w klauzuli GROUP BY

 

 

select   left(ProductName,1) as litera, count(productID) as ile  from Products
group by left(ProductName,1);

 

Ćwiczenie 6. Pogrupuj produkty wg grup cenowych.

 select ProductName, UnitPrice,
 case
 when UnitPrice < 30 then 'tanie'
 when UnitPrice >= 30 and UnitPrice <= 50 then 'srednie'
 when UnitPrice > 50 and UnitPrice <= 80 then 'drogie'
 when UnitPrice > 80 then 'b.drogie'
 else 'inne'
 end as opis
 from Products

 

Ćwiczenie 7. Na podstawie ćwiczenia 6 wyświetl produkty z kategorii „drogie”.

 

Ćwiczenie 8. Który pracownik zrobił najwięcej zamówień ?

 

select LastName, FirstName, count(orderId) as IloscZamowien  from Orders o inner join Employees e on o.EmployeeID=e.EmployeeID
group by LastName, FirstName order by IloscZamowien desc;

W powyższym zapytaniu wyniki są posortowane malejąco. Zastanów się czy można pokazać dane dla tylko jednego pracownika ?

 

 

 

Przewijanie do góry