Last active
July 4, 2016 06:55
-
-
Save ihorkatkov/1548b505617fa9c500fc8fa6de519138 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
First task | |
a. Вернуть название фирмы и ее телефон. В результате должны быть представлены | |
все фирмы по одному разу. Если у фирмы нет телефона, нужно вернуть пробел или | |
прочерк. Если у фирмы несколько телефонов, нужно вернуть любой из них. | |
SELECT DISTINCT | |
name, | |
IFNULL(phone, " ") AS phone | |
FROM symfony.firms AS firms | |
LEFT JOIN symfony.phones AS phones ON firms.id = phones.firm_id | |
GROUP BY name; | |
b. Вернуть все фирмы, не имеющие телефонов. | |
SELECT name | |
FROM symfony.firms AS firms | |
LEFT JOIN symfony.phones AS phones ON firms.id = phones.firm_id | |
GROUP BY phones.id | |
HAVING count(phones.id) = 0; | |
c. Вернуть все фирмы, имеющие не менее 2-х телефонов. | |
SELECT name | |
FROM symfony.firms AS firms | |
LEFT JOIN symfony.phones AS phones ON firms.id = phones.firm_id | |
GROUP BY firm_id | |
HAVING count(*) >= 2; | |
d. Вернуть все фирмы, имеющие менее 2-х телефонов. | |
SELECT name | |
FROM symfony.firms AS firms | |
LEFT JOIN symfony.phones AS phones ON firms.id = phones.firm_id | |
GROUP BY firm_id | |
HAVING count(*) < 2; | |
e. Вернуть фирму, имеющую максимальное кол-во телефонов. | |
SELECT name | |
FROM symfony.firms | |
WHERE id IN ( | |
SELECT firm_id | |
FROM | |
( | |
SELECT | |
firm_id, | |
count(*) AS counted | |
FROM symfony.phones AS phones | |
GROUP BY firm_id | |
ORDER BY counted DESC | |
LIMIT 1 | |
) AS counts); | |
Second task | |
a. Вывести общий объем поставок каждого из продуктов для каждой фирмы с указанием | |
даты последней поставки | |
SELECT | |
company.name AS `company_name`, | |
goods.name AS `good_name`, | |
ifnull(t.sum, "No data") AS `sum`, | |
t.date AS `date` | |
FROM company | |
JOIN goods | |
LEFT JOIN ( | |
SELECT | |
shipment.shipid, | |
compid, | |
goodid, | |
sum(shipment.quantity) AS `sum`, | |
max(shipdate) AS `date` | |
FROM shipment | |
GROUP BY shipment.goodid, shipment.compid | |
) AS t | |
ON company.compid = t.compid AND goods.goodid = t.goodid | |
b.Аналогично предыдущему пункту, но за последние 60 дней. Если поставки | |
какого-либо из товаров для компании в этот период отсутствовали, вывести в | |
столбце объема 'No data' | |
SELECT | |
company.name AS `company_name`, | |
goods.name AS `good_name`, | |
ifnull(t.sum, "No data") AS `sum`, | |
t.date AS `date` | |
FROM company | |
JOIN goods | |
LEFT JOIN ( | |
SELECT | |
shipment.shipid, | |
compid, | |
goodid, | |
sum(shipment.quantity) AS `sum`, | |
max(shipdate) AS `date` | |
FROM shipment | |
WHERE | |
shipment.shipdate >= CURDATE() - INTERVAL 60 DAY AND | |
shipment.shipdate <= CURDATE() | |
GROUP BY shipment.goodid, shipment.compid | |
) AS t | |
ON company.compid = t.compid AND goods.goodid = t.goodid |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment