From e2a44e412e8299ffb3ca4d27ecfd3ea63c821f36 Mon Sep 17 00:00:00 2001 From: Aelita4 Date: Tue, 8 Nov 2022 11:31:42 +0100 Subject: [PATCH] Lab 3 --- lab3.sql | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 lab3.sql diff --git a/lab3.sql b/lab3.sql new file mode 100644 index 0000000..85473f0 --- /dev/null +++ b/lab3.sql @@ -0,0 +1,85 @@ +USE Northwind_2020; + +-- 1. Podaj identyfikator najdłużej realizowanego zamówienia +SELECT OrderID, datediff(DAY, OrderDate, ShippedDate) as Days +FROM Orders +ORDER BY Days DESC + +SELECT OrderID, datediff(DAY, OrderDate, ShippedDate) as Days +FROM Orders +WHERE datediff(DAY, OrderDate, ShippedDate) = +(SELECT max(datediff(DAY, OrderDate, ShippedDate)) FROM Orders) + +-- 2. Podać klientów, którzy mieli przerwę w zakupach dłuższą niż 2 miesiące +SELECT OrderID, CustomerID, OrderDate, ( + SELECT TOP 1 OrderDate FROM Orders + WHERE OrderID > o.OrderID AND + CustomerID = o.CustomerID +) AS NextOrderDate, +datediff(DAY, OrderDate, ( + SELECT TOP 1 OrderDate FROM Orders + WHERE OrderID > o.OrderID AND + CustomerID = o.CustomerID +)) +FROM Orders AS o WHERE datediff(DAY, OrderDate, ( + SELECT TOP 1 OrderDate FROM Orders + WHERE OrderID > o.OrderID AND + CustomerID = o.CustomerID +)) > 62 + + +-- 3. Wypisać identyfikatory tych pracowników, którzy realizowali więcej zamówień +-- niż liczba zamówień zrealizowanych przez pracowników z tego samego kraju +-- co spedytorzy. +SELECT EmployeeID, count(OrderID) FROM Orders +GROUP BY EmployeeID +HAVING count(OrderID) >= all ( + SELECT count(OrderID) FROM Orders + INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID + WHERE Country = ShipCountry + GROUP BY Orders.EmployeeID +) + +-- 4. W firmie używającej bazy Northwind pracownicy (tabela Employees) posiadają +-- adresy emial’owe. Załóżmy, że standardowo nazwa konta (część przed znakiem @) +-- zbudowana jest z pierwszej litery imienia (firstname), inicjału środkowego +-- (pole middlinitial) oraz pierwszych ośmiu znaków nazwiska (lastname). +-- Utwórz zapytanie, które wygeneruje te nazwy email’owe. W tym zadaniu należy +-- użyć funkcji łańcuchowych LOWER i SUBSTRING. +SELECT FirstName, LastName, lower( + concat( + substring(FirstName, 1, 1), + substring(LastName, 1, 8), + '@northwind.com' + ) +) FROM Employees + +-- 5. Podaj dzień w którym było najwięcej zamówień +SELECT count(OrderID) AS HowMany, datename(weekday, OrderDate) AS WeekDay +FROM Orders +GROUP BY datename(weekday, OrderDate) +ORDER BY count(OrderID) DESC + +-- 6. Wypisz nazwę i adres najczęściej zamawiającego klienta -- broken +SELECT CompanyName, City +FROM Customers +WHERE CompanyName = ( +SELECT CompanyName FROM Customers +INNER JOIN Orders ON Orders.CustomerID = Customers.CustomerID +HAVING count(OrderID) >= ALL (SELECT count(OrderID) FROM Orders GROUP BY CustomerID) +) + + + +SELECT count(OrderID), Orders.CustomerID +FROM Orders +INNER JOIN Customers ON Customers.CustomerID = Orders.CustomerID +GROUP BY Orders.CustomerID + +-- 7. Wskazać pracownika który obsługiwał klienta, którego nie obsługiwał nikt inny + + +-- 8. Wypisz dane pracownika którego nazwisko jest najdłuższe. Skorzystaj z funkcji LEN +SELECT LastName +FROM Employees +WHERE len(LastName) = (SELECT max(len(LastName)) FROM Employees) \ No newline at end of file