Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. 1 Task.
  2.  
  3. a - SELECT firms.name, IFNULL(phones.phone, '-') AS phone FROM firms
  4. LEFT JOIN phones ON phones.firm_id = firms.id
  5. GROUP BY phones.firm_id
  6. ORDER BY firms.id
  7.  
  8. b - SELECT firms.id, firms.name FROM firms
  9. LEFT JOIN phones ON phones.firm_id = firms.id
  10. WHERE phones.phone IS NULL
  11.  
  12. c - SELECT firms.name FROM firms
  13. LEFT JOIN phones ON phones.firm_id = firms.id
  14. GROUP BY phones.firm_id
  15. HAVING COUNT(phones.phone) >= 2
  16.  
  17. d - SELECT firms.name FROM firms
  18. LEFT JOIN phones ON phones.firm_id = firms.id
  19. GROUP BY phones.firm_id
  20. HAVING COUNT(phones.phone) < 2
  21.  
  22. e -
  23. По данному пункту есть замечания, в задаче написано вернуть фирму.
  24. Но по-факту может быть несколько фирм которые могут иметь максимальной количество телефонов и тогда запрос
  25. нужно переписать.
  26. Я сделал для одной.
  27.  
  28. SELECT firms.id, firms.name, count(phones.phone) AS phone_count FROM firms
  29. INNER JOIN phones ON phones.firm_id = firms.id
  30. GROUP BY phones.firm_id
  31. ORDER BY phone_count DESC
  32. LIMIT 1
  33.  
  34.  
  35. 2 Task.
  36.  
  37. 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
  38. INNER JOIN company ON company.id = shipment.compid
  39. INNER JOIN goods ON goods.id=shipment.goodid
  40. GROUP BY compid, goodid
  41.  
  42. b - тут я не совсем понял, в задаче написано вывести за последние 40 дней, но если товаров не было то выводить No data.
  43. Может я что-то не так понимаю, но указывая рендж в 40 дней мы либо получаем данные со связками товаров и компаний,
  44. либо Mysql ничего не возвращает и тогда нет вообще смысла выводить No data.
  45. + в таблице нет связки третьей фирмы и третьего товара, тоесть мы не знаем пренадлежит ли 3-й товар 3-й фирме а не какой-то другой.
  46.  
  47. Поэтому я написал запрос такого вида:
  48.  
  49. SELECT company.name AS company_name, goods.name AS product_name, MAX(shipdate) AS last_shipment_date, SUM(quantity) AS total_quantity FROM shipment
  50. LEFT JOIN company ON company.id = shipment.compid
  51. LEFT JOIN goods ON goods.id=shipment.goodid
  52. WHERE shipment.shipdate BETWEEN DATE_SUB(NOW(), INTERVAL 40 DAY) AND NOW()
  53. GROUP BY compid, goodid
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement