Last active
March 19, 2019 08:01
-
-
Save n-bar/a2ee4a4d164f58317e56 to your computer and use it in GitHub Desktop.
Specialist. SQL Level 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--1. Задачи на операции с одной таблицей (без джойнов и подзапросов): | |
--a) В каких категориях имеется несколько товаров от одного и того же поставщика? | |
SELECT CategoryID | |
FROM Products | |
GROUP BY CategoryID, SupplierID | |
HAVING Count(ProductID) > 1; | |
--b) Сколько было куплено штук товара, принесшего компании максимальную выручку? | |
SELECT TOP 1 sum(Quantity) sumQuantity | |
FROM [Order Details] | |
GROUP BY ProductID | |
ORDER BY sum(Quantity * UnitPrice) DESC; | |
--c) В какие месяцы один и тот же покупатель обслуживался у разных продавцов? | |
SELECT CustomerID, MONTH(OrderDate) Month | |
FROM Orders | |
GROUP BY CustomerID, MONTH(OrderDate) | |
HAVING Count(DISTINCT EmployeeID) > 1 | |
ORDER BY CustomerID, Month; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
2. Задачи на подзапросы и джойны (каждую нужно решить двумя способами – подзапросами и джойнами): | |
a) Какие товары (названия) продавались по цене, отличающейся от текущей? | |
Текущая цена указана в Products.UnitPrice? | |
Цена продажи указана в [Orders Details].UnityPrice? | |
Надо ли учитывать скидку? | |
*/ | |
--JOIN | |
SELECT DISTINCT P.ProductName | |
FROM Products P INNER JOIN [Order Details] OD | |
ON P.ProductID = OD.ProductID | |
AND P.UnitPrice != OD.UnitPrice; | |
--WHERE | |
SELECT DISTINCT P.ProductName | |
FROM Products P, [Order Details] OD | |
WHERE P.ProductID = OD.ProductID | |
AND OD.UnitPrice != P.UnitPrice; | |
--Подзапрос в столбце | |
SELECT | |
( | |
SELECT DISTINCT P.ProductName | |
FROM [Order Details] OD | |
WHERE OD.ProductID = P.ProductID | |
AND OD.UnitPrice != P.UnitPrice | |
) ProductName | |
FROM Products P; | |
--Подзапрос в WHERE | |
SELECT P.ProductName | |
FROM Products P | |
WHERE P.ProductID = ( | |
SELECT DISTINCT OD.ProductID | |
FROM [Order Details] OD | |
WHERE OD.ProductID = P.ProductID | |
AND OD.UnitPrice != P.UnitPrice | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
2. Задачи на подзапросы и джойны (каждую нужно решить двумя способами – подзапросами и джойнами): | |
b) Как зовут покупателей, которые потратили в 1997 году меньше 1000 рублей? | |
*/ | |
--JOIN | |
SELECT C.CustomerID, C.ContactName | |
FROM Customers C LEFT JOIN Orders O | |
ON C.CustomerID = O.CustomerID | |
AND Year(OrderDate) = 1997 | |
LEFT JOIN [Order Details] OD | |
ON O.OrderID = OD.OrderID | |
GROUP BY C.CustomerID, C.ContactName --C.ContactName is not unique | |
HAVING COALESCE(sum(OD.UnitPrice * OD.Quantity), 0) < 1000; | |
--Подзапрос в WHERE | |
SELECT C.CustomerID, C.ContactName | |
FROM Customers C | |
WHERE ( | |
SELECT COALESCE(sum(OD.UnitPrice * OD.Quantity), 0) | |
FROM [Order Details] OD, Orders O | |
WHERE C.CustomerID = O.CustomerID | |
AND O.OrderID = OD.OrderID | |
AND Year(O.OrderDate) = 1997 | |
) < 1000; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
2. Задачи на подзапросы и джойны (каждую нужно решить двумя способами – подзапросами и джойнами): | |
c) Как зовут покупателей, которые потратили в 1997 году меньше 1000 рублей на морепродукты (товарная категория Seafood)? | |
*/ | |
--JOIN | |
SELECT C.CustomerID, C.ContactName | |
FROM [Order Details] OD INNER JOIN Products P | |
ON OD.ProductID = P.ProductID | |
INNER JOIN Categories Cat | |
ON P.CategoryID = Cat.CategoryID | |
AND Cat.CategoryName = 'Seafood' | |
INNER JOIN Orders O | |
ON O.OrderID = OD.OrderID | |
AND Year(O.OrderDate) = 1997 | |
RIGHT JOIN Customers C | |
ON O.CustomerID = C.CustomerID | |
GROUP BY C.CustomerID, C.ContactName--C.ContactName is not unique | |
HAVING COALESCE(sum(OD.UnitPrice * OD.Quantity), 0) < 1000; | |
--Подзапрос в WHERE | |
SELECT C.CustomerID, C.ContactName | |
FROM Customers C | |
WHERE ( | |
SELECT COALESCE(sum(OD.UnitPrice * OD.Quantity), 0) | |
FROM [Order Details] OD, Orders O, Products P, Categories Cat | |
WHERE C.CustomerID = O.CustomerID | |
AND O.OrderID = OD.OrderID | |
AND Year(O.OrderDate) = 1997 | |
AND OD.ProductID = P.ProductID | |
AND P.CategoryID = Cat.CategoryID | |
AND Cat.CategoryName = 'Seafood' | |
) < 1000; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Northwind (Упрощенная)