85 lines
2.8 KiB
MySQL
85 lines
2.8 KiB
MySQL
|
USE Northwind_2020;
|
|||
|
|
|||
|
-- 1. Podaj identyfikator najd<6A>u<EFBFBD>ej realizowanego zam<61>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<64> klient<6E>w, kt<6B>rzy mieli przerw<72> w zakupach d<>u<EFBFBD>sz<73> ni<6E> 2 miesi<73>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<73> identyfikatory tych pracownik<69>w, kt<6B>rzy realizowali wi<77>cej zam<61>wie<69>
|
|||
|
-- ni<6E> liczba zam<61>wie<69> zrealizowanych przez pracownik<69>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<61>cej bazy Northwind pracownicy (tabela Employees) posiadaj<61>
|
|||
|
-- adresy emial<61>owe. Za<5A><61><EFBFBD>my, <20>e standardowo nazwa konta (cz<63><7A><EFBFBD> przed znakiem @)
|
|||
|
-- zbudowana jest z pierwszej litery imienia (firstname), inicja<6A>u <20>rodkowego
|
|||
|
-- (pole middlinitial) oraz pierwszych o<>miu znak<61>w nazwiska (lastname).
|
|||
|
-- Utw<74>rz zapytanie, kt<6B>re wygeneruje te nazwy email<69>owe. W tym zadaniu nale<6C>y
|
|||
|
-- u<>y<EFBFBD> funkcji <20>a<EFBFBD>cuchowych LOWER i SUBSTRING.
|
|||
|
SELECT FirstName, LastName, lower(
|
|||
|
concat(
|
|||
|
substring(FirstName, 1, 1),
|
|||
|
substring(LastName, 1, 8),
|
|||
|
'@northwind.com'
|
|||
|
)
|
|||
|
) FROM Employees
|
|||
|
|
|||
|
-- 5. Podaj dzie<69> w kt<6B>rym by<62>o najwi<77>cej zam<61>wie<69>
|
|||
|
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<7A> i adres najcz<63><7A>ciej zamawiaj<61>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<7A> pracownika kt<6B>ry obs<62>ugiwa<77> klienta, kt<6B>rego nie obs<62>ugiwa<77> nikt inny
|
|||
|
|
|||
|
|
|||
|
-- 8. Wypisz dane pracownika kt<6B>rego nazwisko jest najd<6A>u<EFBFBD>sze. Skorzystaj z funkcji LEN
|
|||
|
SELECT LastName
|
|||
|
FROM Employees
|
|||
|
WHERE len(LastName) = (SELECT max(len(LastName)) FROM Employees)
|