Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1 Task.
- a - SELECT firms.name, IFNULL(phones.phone, '-') AS phone FROM firms
- LEFT JOIN phones ON phones.firm_id = firms.id
- GROUP BY phones.firm_id
- ORDER BY firms.id
- b - SELECT firms.id, firms.name FROM firms
- LEFT JOIN phones ON phones.firm_id = firms.id
- WHERE phones.phone IS NULL
- c - SELECT firms.name FROM firms
- LEFT JOIN phones ON phones.firm_id = firms.id
- GROUP BY phones.firm_id
- HAVING COUNT(phones.phone) >= 2
- d - SELECT firms.name FROM firms
- LEFT JOIN phones ON phones.firm_id = firms.id
- GROUP BY phones.firm_id
- HAVING COUNT(phones.phone) < 2
- e -
- По данному пункту есть замечания, в задаче написано вернуть фирму.
- Но по-факту может быть несколько фирм которые могут иметь максимальной количество телефонов и тогда запрос
- нужно переписать.
- Я сделал для одной.
- SELECT firms.id, firms.name, count(phones.phone) AS phone_count FROM firms
- INNER JOIN phones ON phones.firm_id = firms.id
- GROUP BY phones.firm_id
- ORDER BY phone_count DESC
- LIMIT 1
- 2 Task.
- a - SELECT company.name AS company_name, goods.name AS product_name, MAX(shipdate) AS last_shipment_date, SUM(quantity) AS total_quantity FROM shipment
- INNER JOIN company ON company.id = shipment.compid
- INNER JOIN goods ON goods.id=shipment.goodid
- GROUP BY compid, goodid
- b - тут я не совсем понял, в задаче написано вывести за последние 40 дней, но если товаров не было то выводить No data.
- Может я что-то не так понимаю, но указывая рендж в 40 дней мы либо получаем данные со связками товаров и компаний,
- либо Mysql ничего не возвращает и тогда нет вообще смысла выводить No data.
- + в таблице нет связки третьей фирмы и третьего товара, тоесть мы не знаем пренадлежит ли 3-й товар 3-й фирме а не какой-то другой.
- Поэтому я написал запрос такого вида:
- SELECT company.name AS company_name, goods.name AS product_name, MAX(shipdate) AS last_shipment_date, SUM(quantity) AS total_quantity FROM shipment
- LEFT JOIN company ON company.id = shipment.compid
- LEFT JOIN goods ON goods.id=shipment.goodid
- WHERE shipment.shipdate BETWEEN DATE_SUB(NOW(), INTERVAL 40 DAY) AND NOW()
- GROUP BY compid, goodid
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement