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`
基本上,确保内部查询为人们返回您想要的结果,然后将其插入主查询。
我有一个 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`
基本上,确保内部查询为人们返回您想要的结果,然后将其插入主查询。