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
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎