Mysql SQL查询使用wind显示结果,但跳过某些行
我有一个包含11列的田径表,我创建了一个SQL查询,该查询按特定事件、年龄组和性别对表进行排序,删除所有重复项,并保留结果最好的一个。对于某些事件,它还可以区分有风读数的结果和没有风读数的结果,以及风速超过一定速度时的结果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
@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`