Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SELECT CONCAT('Город ', LOWER(s.town), ': ', UPPER(s.name), '(', s.reiting, ')') FROM s
- # 1. Получаем множество поставщиков, выполнивших поставки из Рима
- # SELECT DISTINCT s.n_post
- # FROM s
- # JOIN spj ON s.n_post = spj.n_post
- # JOIN p ON p.n_det = spj.n_det
- # WHERE p.town = 'Рим'
- #
- # 2. Считаем сколько поставщиков в заданном множестве (т.е. поставляли детали из рима)
- # Просто добавляем COUNT
- # SELECT p.n_izd, COUNT(DISTINCT s.n_post)
- # FROM s
- # JOIN spj ON s.n_post = spj.n_post
- # JOIN p ON p.n_det = spj.n_det
- # WHERE p.town = 'Рим'
- # Получили информацию о том, что детали из Рима поставляли 4 поставщика
- #
- # 3. Находим номера деталей, которые поставлял хотя бы один поставщик из пункта 1)
- # (Потом для этих деталей подсчитаем кол-во поставщиков и добавим условие HAVING COUNT = 4)
- #SELECT DISTINCT p.n_det
- #FROM p
- #JOIN spj ON p.n_det = spj.n_det
- #WHERE spj.n_post IN (
- # SELECT DISTINCT s.n_post
- # FROM s
- # JOIN spj ON s.n_post = spj.n_post
- # JOIN p ON p.n_det = spj.n_det
- # WHERE p.town = 'Рим')
- # Получили все детали
- #
- # 4. Получаем количество поставщиков, которые поставляли каждую деталь (из пункта выше)
- # Просто добавляем COUNT и GROUP BY
- #SELECT p.n_det, COUNT(DISTINCT spj.n_post) AS count
- #FROM p
- #JOIN spj ON p.n_det = spj.n_det
- #WHERE spj.n_post IN (
- # SELECT DISTINCT s.n_post
- # FROM s
- # JOIN spj ON s.n_post = spj.n_post
- # JOIN p ON p.n_det = spj.n_det
- # WHERE p.town = 'Рим')
- #GROUP BY p.n_det
- #
- # 5. Добавляем условие: чтобы кол-во из п. 4 было равно кол-во из п. 2
- SELECT p.n_det
- FROM p
- JOIN spj ON p.n_det = spj.n_det
- WHERE spj.n_post IN (
- SELECT DISTINCT s.n_post
- FROM s
- JOIN spj ON s.n_post = spj.n_post
- JOIN p ON p.n_det = spj.n_det
- WHERE p.town = 'Рим')
- GROUP BY p.n_det
- HAVING COUNT(DISTINCT spj.n_post)=(
- SELECT COUNT(DISTINCT spj.n_post)
- FROM p
- JOIN spj ON p.n_det = spj.n_det
- WHERE spj.n_post IN (
- SELECT DISTINCT s.n_post
- FROM s
- JOIN spj ON s.n_post = spj.n_post
- JOIN p ON p.n_det = spj.n_det
- WHERE p.town = 'Рим')
- )
- ORDER BY p.n_det
- SELECT CONCAT('Город ', LOWER(s.town), ': ', UPPER(s.name), '(', s.reiting, ')') FROM "pmib6104".s
Advertisement