【问题标题】:SQL Select Distinct returning duplicatesSQL Select Distinct 返回重复项
【发布时间】:2014-02-11 20:46:44
【问题描述】:

我正在尝试为每个国家/地区平均开球率最高的高尔夫球手返回国家、高尔夫球手姓名、高尔夫球手年龄和平均开球数。

但是,我得到的结果集包含同一国家/地区的重复项。我究竟做错了什么?这是我的代码:

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

【问题讨论】:

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


    【解决方案1】:

    您缺少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;
    

    您的问题是,一个国家/地区的某些人的平均水平与另一个国家/地区的最佳人相同。

    【讨论】:

    • 当我使用上述查询时,我得到“列定义不明确”。有什么想法吗?
    • NVM 我明白了,只需要澄清使用哪个表中的国家信息。谢谢大家!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2021-07-23
      • 2012-10-07
      相关资源
      最近更新 更多