Мои базы данных выглядят так:
ПИК (ИМЯ, ПОДЪЕМ, РАЗНИЦА, КАРТА, РЕГИОН)
АЛЬПИНИСТ (ИМЯ, ПОЛ)
УЧАСТВОВАЛ (TRIP_ID, ИМЯ)
ПОДШЕЛ (TRIP_ID, PEAK, КОГДА)
- PEAK предоставляет информацию о горных вершинах, которые интересуют пользователя. В таблице указано название каждой вершины, ее высота (в футах), уровень сложности (по шкале от 1 до 5), карта, на которой она расположена. и регион Сьерра-Невада, в котором он расположен.
- АЛЬПИНИСТ перечисляет членов клуба, называет их имена и пол.
- УЧАСТИЕ дает набор альпинистов, которые участвовали в каждом из различных восхождений. Количество участников в каждой поездке разное.
- CLIMBED показывает, какие вершины были покорены в каждом восхождении, а также данные о том, что каждая вершина была покорена.
Мне нужна помощь с написанием SQL-запроса для этих двух примеров сценариев:
- На какие вершины покорились Марк и Мэри?
- В каких поездках общая высота, набранная всеми участниками, превышала 500 000 футов?
Это то, что у меня есть для первого запроса:
SELECT PEAK
FROM CLIMBED
WHERE TRIP_ID IN
(SELECT TRIP_ID
FROM PARTICIPATED
WHERE NAME IN ('MARK','MARY')
GROUP BY TRIP_ID
HAVING COUNT(*) = 2
);
Проблема с этим запросом в том, что он дает мне только все вершины, на которые Марк и Мэри поднялись во время одного и того же путешествия, которое они совершили вместе. Мне нужно как-то получить вершины, на которые они оба взобрались, но ради которых не были вместе.
Для второго запроса я понятия не имею, как получить COUNT() каждой вершины, на которую поднялись все участники во время определенного TRIP_ID.