SQL选择Distinct返回重复项

时间:2014-02-11 20:46:44

标签: sql group-by sql-order-by distinct

我正在努力让这个国家,高尔夫球手的名字,高尔夫球手的年龄以及每个国家平均驾驶最高的高尔夫球手平均得分。

但是我得到的结果集与同一个国家/地区的副本相同。我究竟做错了什么?这是我的代码:

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

2 个答案:

答案 0 :(得分: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;

你的问题是,一个国家的某些人的平均水平与另一个国家的平均水平相同。

答案 1 :(得分:0)

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