lab3/lab3.sql

85 lines
2.8 KiB
MySQL
Raw Normal View History

2022-11-08 10:31:42 +00:00
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)