2014-02-11 63 views
0

我试图从每个国家返回高尔夫球手的国家,高尔夫球手名称,高尔夫球手年龄和平均车速。SQL选择不同的返回副本

但是,我得到的结果集与重复的同一个国家。我究竟做错了什么?这里是我的代码:

select distinct country, name, age, avgdrive 
from pga.golfers S1 
inner join 
(select max(avgdrive) as MaxDrive 
from pga.golfers 
group by country) S2 
on S1.avgdrive = s2.MaxDrive 
order by avgdrive; 

这些都是一些成绩我已经得到了,我应该只得到15行的,而是我得到20:

COUN NAME         AGE AVGDRIVE 
---- ------------------------------ ---------- ---------- 
Can Mike Weir        35  279.9 
T&T Stephen Ames       41  285.8 
USA Tim Petrovic       39  285.8 
Ger Bernhard Langer      47  289.3 
Swe Fredrik Jacobson      30  290 
Jpn Ryuji Imada       28  290 
Kor K.J. Choi        37  290.4 
Eng Greg Owen        33  291.8 
Ire Padraig Harrington      33  291.8 
USA Scott McCarron       40  291.8 
Eng Justin Rose       25  293.1 
Ind Arjun Atwal       32  293.7 
USA John Rollins       30  293.7 
NIr Darren Clarke       37  294 
Swe Daniel Chopra       31  297.2 
Aus Adam Scott        25  300.6 
Fij Vijay Singh       42  300.7 
Spn Sergio Garcia       25  301.9 
SAf Ernie Els        35  302.9 
USA Tiger Woods       29  315.2 

回答

0

你是缺少join条件:

select s1.country, s1.name, s1.age, s1.avgdrive 
from pga.golfers S1 inner join 
    (select country, max(avgdrive) as MaxDrive 
     from pga.golfers 
     group by country 
    ) S2 
    on S1.avgdrive = s2.MaxDrive and s1.country = s2.country 
order by s1.avgdrive; 

你的问题是,有些人在一个国家具有相同的平均值作为在另一个国家最好的。

+0

当我使用上述查询时,我得到“列不明确定义”。有任何想法吗? – user2985261

+0

NVM我知道了,只需要澄清哪些表使用国家信息。多谢你们! – user2985261

0

DISTINCT消除重复行,而不是某些字段中的值。 要获取具有年龄,姓名和最大驱动器的国家/地区的列表,您需要按国家/地区对整个选择进行分组。