2012-10-29 84 views
2

我需要在我的數據庫中顯示最年輕的運動員。 MIN(Athlete.Age)運行良好,但顯然也需要名稱。當我添加名稱來選擇我得到約5個結果。我如何顯示MIN(年齡)和她的名字?SQL使用Min()

​​

回答

0
select * 
from 
(
    select Athlete.Age, Athlete.Name 
    from (((Country INNER JOIN Athlete ON Country.Country_Code = Athlete.Country_Code) 
     INNER JOIN Athlete_event 
     ON Athlete.Athlete_ID = Athlete_event.Athlete_ID2) 
     INNER JOIN Event 
     ON Event.Event_ID = Athlete_event.Event_ID2) 
    Where Athlete.Athlete_ID = Event.Award_Gold 
    order by Age 
) v 
where rownum=1; 
0

添加您的查詢

HAVING MIN(Athlete.Age) = (SELECT MIN(AGE) from Athlete) 

此行,您的最終查詢看起來像

SELECT MIN(Athlete.Age), 
     Athlete.NAME 
FROM (((Country INNER JOIN Athlete 
      ON Country.Country_Code = Athlete.Country_Code 
     ) INNER JOIN Athlete_event 
      ON Athlete.Athlete_ID = Athlete_event.Athlete_ID2 
     ) INNER JOIN Event 
      ON Event.Event_ID = Athlete_event.Event_ID2 
     ) 
WHERE Athlete.Athlete_ID = Event.Award_Gold 
GROUP BY Athlete.NAME 
HAVING MIN(Athlete.Age) = (SELECT MIN(AGE) FROM Athlete) 
4

你可能有5名運動員與同年齡。查詢將不知道你想要哪一個。

如果您在數據庫中有出生日期,請嘗試使用它。

存儲年齡通常不是一個好主意,因爲在一年內,他們都是錯的。

[edit2]請注意,人們仍有可能分享同一個生日。

+0

+1推薦使用出生日期而不是年齡 –

0

如果您在查詢中使用GROUP BY,您正在搜索每位運動員的最小年齡。

你應該嘗試一個子查詢。將它添加到where子句。例如:(未測試)

select Athlete.Age, Athlete.Name 
from Athlete 
AND Athlete.Age = (select MIN(Athlete.Age) 
from (((Country INNER JOIN Athlete ON Country.Country_Code = Athlete.Country_Code) 
INNER JOIN Athlete_event 
ON Athlete.Athlete_ID = Athlete_event.Athlete_ID2) 
INNER JOIN Event 
ON Event.Event_ID = Athlete_event.Event_ID2) 
Where Athlete.Athlete_ID = Event.Award_Gold);