Gistrec

DB lab 3

Oct 6th, 2019
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SELECT CONCAT('Город ', LOWER(s.town), ': ', UPPER(s.name), '(', s.reiting, ')') FROM s
  2.  
  3.  
  4.  
  5. # 1. Получаем множество поставщиков, выполнивших поставки из Рима
  6. #        SELECT DISTINCT s.n_post
  7. #        FROM s
  8. #        JOIN spj ON s.n_post = spj.n_post
  9. #        JOIN p   ON p.n_det  = spj.n_det
  10. #        WHERE p.town = 'Рим'
  11. #
  12. # 2. Считаем сколько поставщиков в заданном множестве (т.е. поставляли детали из рима)
  13. # Просто добавляем COUNT
  14. #        SELECT p.n_izd, COUNT(DISTINCT s.n_post)
  15. #        FROM s
  16. #        JOIN spj ON s.n_post = spj.n_post
  17. #        JOIN p   ON p.n_det  = spj.n_det
  18. #        WHERE p.town = 'Рим'
  19. # Получили информацию о том, что детали из Рима поставляли 4 поставщика
  20. #
  21. # 3. Находим номера деталей, которые поставлял хотя бы один поставщик из пункта 1)
  22. #    (Потом для этих деталей подсчитаем кол-во поставщиков и добавим условие HAVING COUNT = 4)
  23. #SELECT DISTINCT p.n_det
  24. #FROM p
  25. #JOIN spj ON p.n_det = spj.n_det
  26. #WHERE spj.n_post IN (
  27. #    SELECT DISTINCT s.n_post
  28. #    FROM s
  29. #    JOIN spj ON s.n_post = spj.n_post
  30. #    JOIN p   ON p.n_det  = spj.n_det
  31. #    WHERE p.town = 'Рим')
  32. # Получили все детали
  33. #
  34. # 4. Получаем количество поставщиков, которые поставляли каждую деталь (из пункта выше)
  35. #    Просто добавляем COUNT и GROUP BY
  36. #SELECT p.n_det, COUNT(DISTINCT spj.n_post) AS count
  37. #FROM p
  38. #JOIN spj ON p.n_det = spj.n_det
  39. #WHERE spj.n_post IN (
  40. #    SELECT DISTINCT s.n_post
  41. #    FROM s
  42. #    JOIN spj ON s.n_post = spj.n_post
  43. #    JOIN p   ON p.n_det  = spj.n_det
  44. #    WHERE p.town = 'Рим')
  45. #GROUP BY p.n_det
  46. #
  47. # 5. Добавляем условие: чтобы кол-во из п. 4 было равно кол-во из п. 2
  48. SELECT p.n_det
  49. FROM p
  50. JOIN spj ON p.n_det = spj.n_det
  51. WHERE spj.n_post IN (
  52.     SELECT DISTINCT s.n_post
  53.     FROM s
  54.     JOIN spj ON s.n_post = spj.n_post
  55.     JOIN p   ON p.n_det  = spj.n_det
  56.     WHERE p.town = 'Рим')
  57. GROUP BY p.n_det
  58. HAVING COUNT(DISTINCT spj.n_post)=(
  59.     SELECT COUNT(DISTINCT spj.n_post)
  60.     FROM p
  61.     JOIN spj ON p.n_det = spj.n_det
  62.     WHERE spj.n_post IN (
  63.         SELECT DISTINCT s.n_post
  64.         FROM s
  65.         JOIN spj ON s.n_post = spj.n_post
  66.         JOIN p   ON p.n_det  = spj.n_det
  67.         WHERE p.town = 'Рим')
  68.     )
  69. ORDER BY p.n_det
  70.  
  71.  
  72. SELECT CONCAT('Город ', LOWER(s.town), ': ', UPPER(s.name), '(', s.reiting, ')') FROM "pmib6104".s
Advertisement