如何通过Nested Subquery获取薪资总和最高的球队及对应薪资
解决方法:用嵌套子查询显示薪资总和最高的球队
要同时输出球队名称和对应的最高薪资总和,你需要先计算每个球队的薪资总和,再筛选出总和等于最大值的记录,以下是两种基于嵌套子查询的可行写法:
写法一:使用HAVING子句配合嵌套子查询
SELECT t.name, SUM(p.salary) AS total_salary FROM teams t JOIN playersalary p ON t.id = p.team_id GROUP BY t.name HAVING SUM(p.salary) = ( -- 先计算所有球队的薪资总和,再取其中的最大值 SELECT MAX(total_salary) FROM ( SELECT SUM(salary) AS total_salary FROM playersalary GROUP BY team_id ) AS team_salaries );
写法二:先生成球队总薪资临时表,再筛选最大值
SELECT name, total_salary FROM ( -- 第一步:计算每个球队的名称和薪资总和 SELECT t.name, SUM(p.salary) AS total_salary FROM teams t JOIN playersalary p ON t.id = p.team_id GROUP BY t.name ) AS team_total_salaries WHERE total_salary = ( -- 第二步:计算所有球队薪资总和的最大值 SELECT MAX(total_salary) FROM ( SELECT SUM(salary) AS total_salary FROM playersalary GROUP BY team_id ) AS max_salary_calc );
原语句问题分析
- 语句1:仅通过
MAX(SUM(salary))拿到了最高薪资总和的数值,但由于GROUP BY name会返回所有球队的分组结果,无法直接将最大值与对应球队名称关联,因此无法输出球队名。 - 语句2:错误地以单个球员的最高薪资为筛选条件,没有按球队分组计算薪资总和,完全偏离了“薪资总和最高球队”的需求。
内容的提问来源于stack exchange,提问作者maxMas
相关产品推荐
相关产品推荐

