mysql - 查找所选列的每一行的最小值
问题描述
作为查询的结果,我想获取所有行(驱动程序),按获得最多系列胜利的驱动程序排序。如果一名车手至少一次或多次赢得 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;
当我使用带驱动程序 ID 的 WHERE 时,意外地得到了部分预期输出
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 和小写。使运行代码变得更加容易
推荐阅读
- reactjs - 如何启动多个调度
- c++ - 特征读取和写入 LLT 分解到文件
- oracle - 自动列表分区
- php - MySQL:使用 AS 变量查询不起作用
- javascript - 使用 nodeJS 和 mongoDB 将字符串推入数据库
- c# - 建立正确的领域子查询
- jenkins - 詹金斯管道中的字符串插值,用于评估作为参数接收的字符串
- reactjs - 如何替换 bindActionCreators 并使用 mapDispatchToProps 和 mapStateToProps
- python - Python 基准测试:为什么 for in 循环比简单的 while 更快?
- angularjs - Angularjs单击外部事件在子指令中不起作用