首页 > 解决方案 > 查找所选列的每一行的最小值

问题描述

作为查询的结果,我想获取所有行(驱动程序),按获得最多系列胜利的驱动程序排序。如果一名车手至少一次或多次赢得 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

标签: mysql

解决方案


运行这个,

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 和小写。使运行代码变得更加容易


推荐阅读