的關鍵表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