如何在SQL中找出各部门平均薪资中的最小值?
解决各部门平均薪资最小值的查询问题
你的SQL语句报错有两个原因:
- 语法错误:
groupby需要写成group by(中间有空格) - 逻辑错误:SQL不允许在同一个SELECT层级直接嵌套聚合函数(比如
min(avg(salary)))——avg(salary)是分组后的聚合结果,外层的min需要基于这个分组结果集来计算,不能直接嵌套调用。
下面是两种可行的解决方案:
方法一:使用子查询
先通过子查询计算每个部门的平均薪资,再在外层查询中取这些平均值的最小值:
SELECT MIN(dept_avg) FROM ( SELECT AVG(salary) AS dept_avg FROM Department GROUP BY dno ) AS dept_salaries;
方法二:使用CTE(公共表表达式)
CTE的写法可读性更强,适合处理复杂查询逻辑:
WITH dept_salaries AS ( SELECT AVG(salary) AS dept_avg FROM Department GROUP BY dno ) SELECT MIN(dept_avg) FROM dept_salaries;
逻辑说明
两种方法的核心逻辑一致:
- 先按部门(
dno)分组,计算每个部门的平均薪资,得到一个包含所有部门平均薪资的临时数据集 - 再对这个临时数据集使用
MIN()函数,即可得到所有部门平均薪资中的最小值
内容的提问来源于stack exchange,提问作者Sheldon vibes
相关产品推荐
相关产品推荐

