2013-10-09 60 views
0

這裏是數據庫描述:整蠱SQL運動

公司(ID_comp,名)

旅行(trip_no,id_comp,飛機,town_from,town_to,TIME_OUT,time_in)

客運( ID_psg,名)

Pass_in_trip(trip_no,日期,ID_psg,地點)

  • 公司桌上有公司的身份證件和公司名稱,用於運送乘客。
  • 旅行表有關於旅行的信息:旅行號碼,公司ID,飛機類型,出發城市,到達城市,出發時間和到達時間。
  • 乘客桌上有乘客身份證和乘客姓名。
  • Pass_in_trip表中有關於航班的信息:航班號,出發日期(日期),乘客ID和他在航班中的位置。

我們應該注意的是,

  • 任何行程每天都被完成;航班的持續時間少於日曆日(24小時);
  • 時間和日期被認爲是相對一個時區;
  • 出發時間和到達時間在一分鐘內給出;
  • 可以有同名乘客(例如,布魯斯威利斯);
  • 飛行期間的地方是一個數字後跟一個字母;該數字定義了行號,字母(a - d) - 行中的地方(從左到右)按字母順序排列;
  • 關係和限制顯示在數據模式中。

這裏是問題:

找到不同的乘客,這顯然不止一次在同一個座位的名字。

我已經試過此查詢

select name from (
select id_psg, count(name) as total from (
select a.id_psg, name, date,place from passenger a join 
pass_in_trip b on a.id_psg=b.id_psg order by a.id_psg, place 
) as t1 
group by t1.id_psg 
) as a join passenger b on a.id_psg = b.id_psg 
join pass_in_trip c on a.id_psg=c.id_psg 
where total > 1 
group by name,place 
having count(place) >=2 
order by name,place; 

但它說:

Wrong 
Your query produced correct result set on main database, but it failed test on second, checking database 
* Wrong number of records (more by 8) 
  • 這是SQL-RU BTW的練習。

回答

1
SELECT 
    p.name 
FROM 
    passenger AS p 
    JOIN 
    pass_in_trip AS pt 
     ON p.id_psg = pt.id_psg 
GROUP BY 
    p.id_psg, p.pame 
HAVING 
    COUNT(DISTINCT pt.place) < COUNT(*) ; 
0
select name, place, COUNT(name)as "no of trips" 
from Passenger p 
join Pass_in_trip pt 
    on p.ID_psg=pt.ID_psg join Trip t 
    on pt.trip_no=t.trip_no 
group by name, place 
having count(name) > 1