lab3/lab3.sql

85 lines
2.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 emialowe. 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 emailowe. 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)