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

Mysql SQL查询使用wind显示结果,但跳过某些行,mysql,sql,sql-server,dbvisualizer,Mysql,Sql,Sql Server,Dbvisualizer,我有一个包含11列的田径表,我创建了一个SQL查询,该查询按特定事件、年龄组和性别对表进行排序,删除所有重复项,并保留结果最好的一个。对于某些事件,它还可以区分有风读数的结果和没有风读数的结果,以及风速超过一定速度时的结果 @export on; @export set filename="/home/filename.csv" CsvColumnDelimiter=","; select * from Results2015; SELECT resu.Result, resu

我有一个包含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;
出于某种原因,它在输出中完全跳过名称4。名称4的数据与其他条目完全相同,它将显示这些条目,但它完全排除名称4以及其他条目,但仅限于那些具有WindReads的条目

如果我将风按部分添加到组中

GROUP BY `Full Name`, Gender, Event, Agegroup, Wind
它确实显示了所有正确的结果,但是我想避免出现很多重复的结果

知道发生了什么事吗

我使用DbVisualizer Pro进行所有SQL查询

这里是SQLFiddle示例
问题在于Tamza Bay没有显示在输出中,这是因为名称4位于年龄组“Youth”中,而不是查询指定的“Junior”

添加正确的数据并使用fiddler播放后进行编辑:

这是您的查询:

(Edit2-已删除空间/的查询)

区别在于内部查询上的分组依据。你没有指定风是它的一部分。大多数DBMS都会在这方面出错,但MySQL不会。它还对格式不正确的GROUP BY的查询执行一些奇怪的操作,例如,对GROUP BY的查询不包括select中所有未聚合的列。在这种情况下,它导致该组返回2.4风速,然后将其排除。这是MySQL的一个已知“特性”

编辑2: 我将te FIDLE更改为包含此查询:

       SELECT MIN(`Result`) `BestResult`,
              `Full Name`, `Gender`,
              `Event`, `Agegroup`
         FROM `Results2015`
        GROUP BY `Full Name` , `Gender`, `Event`, `Agegroup`;
…这是您的内部查询,用于从完整表中选择正确的结果。这为坦扎湾提供了11.64的最佳结果,这确实是最好的结果。然而,在那场比赛中,风力是2.4级,因此外风将其排除在外。这就是为什么

可能需要在内部查询中包含外部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`
选择MIN(`Result`)`BestResult`,
`全名“,”性别“,
`事件“”,年龄组`
自`结果2015`
其中'Event`='100m'
和'Gender`='F'
和“年龄组”=“少年”
还有“风”

“Wind”与MySQL和SQL Server有相同的问题吗?请使用列标题更新示例数据。目前我们不能说哪一列是风,哪一列是什么。另外,请尝试制作一个示例,这对每个人都有很大的帮助。如果你的Wind列是varchar或数字,则不清楚calsue在何处指定resu.Wind“”和resu.Wind。请从子查询中删除Wind列,我想它应该会起作用。@BerndLinde Ok cool我用相关信息更新了我的帖子。我还做了一个SQLFiddle示例,不要紧,名字4也有一个结果,在示例表的第4行附近有一个女三年级学生。检查这里的SQLFiddle样本我想你说的是Jank van Wank?如果是这样,她将出现在你链接的小提琴手中。(如果你链接到问题中的小提琴手,并指定问题的名字,这会有所帮助。)Thanx我编辑了我的问题。问题在于Tamza Bay没有显示在输出中,即使她是一名大三学生和一名女性。只要我通过查询将Wind添加到组中,我就会开始为同一个人获取多个列表,我希望避免这样做OK。从内部查询中完全去掉Wind,并将其从ON列表中删除。
               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`