我已经尝试了以下代码,但是只获取了具有所有名称和总和值的完整表,而不是具有最大值的一行:

SELECT stageName, max(total_salary)
FROM (
      SELECT c.*, sum(p.dailySalary) as total_salary        
      from contender as c
      left join participant as p
      on (p.contender = c.idContender)
      group by c.idContender ) b
group by stageName;
output: 
Yellow Jesters  205
TikTok  3073
Teabags 947
Bobbleheads 11840
Reddit  1486

但我只需要: 傻瓜头11840

PS:请提出使用desc和limit的解决方案WITHOUT

分析解答

这是一个不使用ORDER BY, LIMIT,窗口函数,视图或CTE即可在任何版本的MySQL 5.x上运行的解决方案。

SELECT a.stagename, a.total_salary
FROM (
      SELECT c.*, sum(p.dailySalary) as total_salary        
      from contender as c
      left join participant as p
      on (p.contender = c.idContender)
      group by c.idContender ) AS a
LEFT OUTER JOIN (
      SELECT c.*, sum(p.dailySalary) as total_salary        
      from contender as c
      left join participant as p
      on (p.contender = c.idContender)
      group by c.idContender ) AS b
  ON a.total_salary < b.total_salary
WHERE b.total_salary IS NULL;

在MySQL 5.7.27上测试。

输出:

+-------------+--------------+
| stagename   | total_salary |
+-------------+--------------+
| Bobbleheads |        11840 |
+-------------+--------------+