SQL 用 wind 查询显示结果但跳过某些行

SQL Query display results with wind but it skips certain lines

我有一个 table 有 11 个田径列,我创建了一个 SQL 查询,按特定事件、年龄组和性别,取出所有重复项并保留结果最好的那个。对于某些事件,它还会区分有风读数的结果和没有风读数的结果,以及风是否超过一定速度。

 @export on;
@export set filename="/home/filename.csv" CsvColumnDelimiter=",";
select * from Results2015;

SELECT resu.Result,
       resu.Wind,
       resu.`Full Name`,
       resu.Province,
       resu.BirthDate,
       resu.Position,
       resu.Location,
       resu.Date
  FROM Results2015 resu
  JOIN (
               SELECT MIN(Result) BestResult,
                      Wind, `Full Name`, Gender,
                      Event, Agegroup
                 FROM Results2015
                GROUP BY `Full Name`, Gender, Event, Agegroup
       ) best   
           ON  resu.Result    = best.BestResult
          AND  resu.Wind      = best.Wind 
          AND  resu.`Full Name`  = best.`Full Name`
          AND  resu.Gender    = best.Gender
          AND  resu.Event     = best.Event
          AND  resu.Agegroup  = best.Agegroup
  WHERE resu.Event = '100m'
   AND resu.Gender = 'F'
   AND resu.Agegroup = 'Junior' 
   AND resu.Wind <> ''
   AND resu.Wind <= 2                    
 ORDER BY resu.Result asc;

它工作得很好,但我注意到它遗漏了很多结果,包括风读数,我不知道为什么。这是我使用的table示例

Result  Wind    Full Name   Province    BirthDate   Position    Location    Date    Event   Gender  Agegroup
12.78   -3.6    Name 4      WPA         D.o.B       6           Bellville   3-Feb   100m    F       Junior
12.87   -3.6    Name 2      WPA         D.o.B       7           Bellville   8-Feb   100m    M       Youth
12.64   -0.8    Name 3      WPA         D.o.B       2           Bellville   8-Feb   100m    F       Junior
12.02   -0.8    Name 4      WPA         D.o.B       1           Bellville   8-Feb   100m    F       Junior
12.84   -0.8    Name 5      WPA         D.o.B       3           Bellville   8-Feb   100m    F       Junior
13.07   -0.8    Name 6      WPA         D.o.B       4           Bellville   8-Feb   100m    F       Junior
13.23   -0.8    Name 7      WPA         D.o.B       5           Bellville   8-Feb   100m    F       Junior
13.71   -4.3    Name 8      WPA         D.o.B       1           Bellville   8-Feb   100m    F       Junior
13.85   -4.3    Name 9      WPA         D.o.B       2           Bellville   8-Feb   100m    F       Junior
14.33   -4.3    Name 10     WPA         D.o.B       3           Bellville   8-Feb   100m    F       Junior
14.69           Name 11     WPA         D.o.B       4           Bellville   2-Feb   100m    F       Junior
13.11   -2.9    Name 12     WPA         D.o.B       1           Bellville   8-Feb   100m    F       Sub-Youth
13.43   -2.9    Name 13     WPA         D.o.B       2           Bellville   8-Feb   100m    F       Sub-Youth
13.53   -2.9    Name 12     WPA         D.o.B       3           Bellville   14-Feb  100m    F       Sub-Youth
13.60   -1.5    Name 15     WPA         D.o.B       1           Bellville   14-Feb  100m    F       Sub-Youth

出于某种原因,它在输出中完全跳过了名称 4。姓名 4 的数据与其他条目完全相同,它会显示这些条目,但它完全排除了姓名 4 和其他条目,但只有那些据我所知具有风读数的条目。

如果我将 Wind 添加到

的 GROUP BY 部分
GROUP BY `Full Name`, Gender, Event, Agegroup, Wind

它确实显示了所有正确的结果,但是我想避免很多重复。

知道发生了什么吗?

我的所有 SQL 查询都使用 DbVisualizer Pro

SQL此处为小提琴示例 http://www.sqlfiddle.com/#!2/f8958/1 问题在于 Tamza Bay 未在输出中显示

那是因为姓名 4 属于 'Youth' 年龄组,而不是您的查询指定的 'Junior'。

添加适当的数据后编辑 fiddler 玩过:

这是您的查询:

(Edit2 - 已删除 space/ 的查询)

不同之处在于内部查询中的 GROUP BY。您没有将 Wind 指定为其中的一部分。大多数 DBMS 都会出错,但 MySQL 不会。它还对带有格式错误的 GROUP BY 的查询做了一些奇怪的事情——即带有不包含 select 中所有未聚合列的组的查询。在这种情况下,它导致 GROUP BY return 2.4 风速然后被排除在外。这是 MySQL 的已知 'feature'。

编辑 2: 我更改了 te fiddle 以包含此查询:

       SELECT MIN(`Result`) `BestResult`,
              `Full Name`, `Gender`,
              `Event`, `Agegroup`
         FROM `Results2015`
        GROUP BY `Full Name` , `Gender`, `Event`, `Agegroup`;

...这是您的内部查询,用于 select 来自完整 table 的正确结果。这给了塔姆萨湾11.64的最好成绩,这确实是最好的成绩。但是,那场比赛的风力为 2.4,因此外部 Where 将其排除在外。这就是为什么。

可能您需要在内部查询中包含外部 where:

               SELECT MIN(`Result`) `BestResult`,
                      `Full Name`, `Gender`,
                      `Event`, `Agegroup`
                 FROM `Results2015`
  WHERE `Event` = '100m'
   AND `Gender` = 'F'
   AND `Agegroup` = 'Junior' 
       AND `Wind` <> ''
   AND `Wind` <= 2    
                GROUP BY `Full Name` , `Gender`, `Event`, `Agegroup`

基本上,确保内部查询为人们返回您想要的结果,然后将其插入主查询。