mysql 5.x 到目前为止,我已经返回了每个竞争者(由每个人都有个人工资的参与者组成)以及竞争者的总工资。我想获取包含最高工资的行。
SELECT StageName, MAX(TotalSalary)
FROM (
SELECT StageName, SUM(DailySalary) AS TotalSalary
FROM CONTENDER, PARTICIPANT
WHERE idContender = Contender
GROUP BY idContender
) AS AllContenders;
这给了我一行最高工资,但它只给出了第一行的名称,而不是我需要找到的正确行
+-------------+-------------+
| StageName | TotalSalary |
+-------------+-------------+
| Life | 2600 |
| Death | 6000 |
| AC/DC | 16000 |
| Yin | 2700 |
| Yang | 3300 |
| Error Group | 1337 |
+-------------+-------------+
这是我通过中间的 select 语句得到的结果。
我通过完整代码得到的是生命和 16000, 我应该得到的是 acdc 和 16000
最佳答案
首先,您按 idContender
进行分组,但选择 StageName
,这将为每组 提供一个随机的
而不是通过错误阻止您(仅限 MySql 的问题)。因此,您不需要在子查询中选择 StageName
>idContenderStageName, SUM(DailySalary)
,而是需要选择 idContender, SUM(DailySalary)
。最后,您可以使用 CONTENDER
将子查询更改为连接查询,并使用 order by
和 limit
您可以选择具有最高 的第一条记录>总工资
:
SELECT t1.*, t2.TotalSalary as MaxSalary
FROM CONTENDER t1 join (
SELECT idContender, SUM(DailySalary) AS TotalSalary
FROM CONTENDER, PARTICIPANT
WHERE idContender = Contender
GROUP BY idContender
) AS t2
on t1.id = t2.idContender
order by MaxSalary desc
limit 1
关于mysql - 使用 max sql 获取关联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55145224/