mysql - 使用 max sql 获取关联值

标签 mysql sql greatest-n-per-group

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,这将为每组 提供一个随机的 StageName >idContender 而不是通过错误阻止您(仅限 MySql 的问题)。因此,您不需要在子查询中选择 StageName, SUM(DailySalary),而是需要选择 idContender, SUM(DailySalary)。最后,您可以使用 CONTENDER 将子查询更改为连接查询,并使用 order bylimit 您可以选择具有最高 的第一条记录>总工资:

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/

相关文章:

sql - 选择一张信用卡的最新余额大于另一张信用卡的人

MySql 非法混合排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8_unicode_ci,COERCIBLE)

sql - 多个 Where 条件

java - Spring Boot 和 PostgreSQL 中文件 data.sql 中错误的 SQL 语句语法

mysql - 如何通过 Syslog 发送结构化数据?

MySQL 选择 MySQL 结果子集中最接近的匹配

php - MySQL 查询问题

php - 此备份脚本中的 "drop table"和 "create table"选项有什么作用?

mysql - 选择日期更改

c# - 在 WPF 中使用另一个组合框所选项目填充组合框