作为查询的结果,我想获得所有行(驱动程序),并按获胜最多的驱动程序的顺序排列。
如果驾驶员至少赢得了一次或多次4次钉球,但至少一次没有赢得剩余的赛道,则他的系列数为0。
驱动表
ID|Name| .........
1 A
2 B
3 C
4 D
轨道表
TID |FK|Track1_Wins|Track2_Wins| Track3_Wins|Track4_Wins|Track5_Wins|
1 1 5 6 3 2 4
2 2 2 4 0 5 3
3 3 6 3 9 4 7
4 4 5 8 2 4 1
我的代码示例
SELECT `Drivers`.`Name`, LEAST(`Track1_Wins`, `Track2_Wins`, `Track3_Wins`, `Track4_Wins`, `TRACK5_Wins`) AS Series
FROM `Drivers`, `Tracks`
ORDER BY Series DESC;
偶然地,当我将WHERE与驱动程序ID一起使用时,得到了部分预期的输出
SELECT `Drivers`.`Name`, LEAST(`Track1_Wins`, `Track2_Wins`, `Track3_Wins`, `Track4_Wins`, `TRACK5_Wins`) AS Series FROM `Drivers`, `Tracks` WHERE `Drivers`.`ID` = 2 ORDER BY Series DESC;
它将给出预期的结果,但驱动程序名称与预期的相同
B 3
B 2
B 1
B 0
我的预期输出是
Name | Series
C 3
A 2
D 1
B 0
最佳答案
运行这个
SELECT d.`Name`,
LEAST(`Track1_Wins`, `Track2_Wins`, `Track3_Wins`, `Track4_Wins`, `TRACK5_Wins`) AS Series
FROM `Drivers` d INNER JOIN `Tracks` t
ON t.`FK` = d.`ID`
ORDER BY Series DESC;
这将返回与FK关联的用户名。另外,尝试对所有列和表名使用kebab_case和小写。使运行代码更加容易
关于mysql - 查找所选列每一行的最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58146823/