【发布时间】:2016-07-24 14:16:04
【问题描述】:
我的数据库如下所示:
峰(姓名、海拔高度、差值、地图、地区)
登山者(姓名、性别)
参加(TRIP_ID、姓名)
爬升(TRIP_ID、PEAK、WHEN)
- PEAK 提供有关用户感兴趣的山峰的信息。该表列出了每个山峰的名称、海拔(以英尺为单位)、难度级别(1-5 级)、地图位于,以及它所在的内华达山脉地区。
- CLIMBER 列出了俱乐部的成员,并给出了他们的姓名和性别。
- PARTICIPATED 提供了参加过各种登山旅行的登山者的集合。每次旅行的参与者人数各不相同。
- CLIMBED 会根据每座山峰的攀登数据,告诉您每次攀登过程中攀登了哪些山峰。
我需要帮助我为这 2 个示例场景编写 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
);
这个查询的问题是它只给了我马克和玛丽在他们一起进行的同一次旅行中攀登的所有山峰。我需要以某种方式获得他们俩都攀登过的山峰,但他们并没有一起攀登。
对于第二个查询,我不知道如何获取所有参与者在特定 TRIP_ID 期间攀登的每个峰的 COUNT()。
【问题讨论】:
-
对于第一个查询,我的意思是说我需要能够抓取 Mark 和 Mary 攀登过的所有山峰,不包括 Mark 攀登过而 Mary 没有攀登过的山峰或者玛丽爬了,而马克没有。