的关键表w乌尔德是:
之旅(trip_id,passenger_id,start_location_id,end_location_id)
你可能有一个位置表与有关站的信息。
然后查询,简直是
select start_location_id, end_location_id, count(*)
from trip
group by start_location_id, end_location_id
having count(*)>=2
编辑
每下面的评论,也许我误解了要求。您是否试图找到超过2名乘客的TRIPS,或者超过2名乘客的地点,或者是什么?也就是说,如果我们有跳闸(A1,L1,L2),(Betty,L1,L2),(Carl,L1,L3),(Donna,L2,L4),输出应为:
L1, L2, 2
(这就是全部)?
还是应
L1, 3
L2, 3
我相信我上面的查询将给出的第一个结果。如果你正在寻找的第二个结果,这将是:
select location, sum(visits)
from
(
select start_location_id as location, count(*) as visits
from trip
union
select end_location_id as location, count(*) as visits
from trip
)
group by location
having sum(visits)>=2
order by location
当你相加计算为两个不同的专栏中,我看不出有什么办法避免使用工会和内部查询。
可以说,不同的模式将使这个查询轻松许多,即代替行程有trip_stop:
trip_stop(passenger_id,LOCATION_ID,stop_number)
其中stop_number是,比方说,1开始位置和2结束位置。
现在我想到了,这真的好多了,因为它消除了代表相同想法的两个字段,并且可以很容易地扩展为具有多个停靠点的行程。
然后查询简直变成
select location_id, count(*)
from trip_stop
group by location_id
having count(*)>=2
order by location_id
来源
2010-04-28 06:14:20
Jay
> 3)是否有任何网站给出了这些有趣的数据库设计问题... 我猜这个答案是“你的班级”。 – tpdi 2010-04-28 05:49:02
这看起来像是作业或面试任务。 “设计一个规范化的数据库”,“编写一个查询”,“报告应该列出”都是这种性质的标准,而不是我通常会写出来的,如果我是在寻求我的设计想法头为乐趣。 – 2010-04-28 05:49:50
听起来像是给我的任务,不是那么难,我会建议有一个去和张贴你的东西,如果你需要特定点的帮助;-) – 2010-04-28 05:52:47