1

我被一个查询困住了,我无法让它正常工作。

这是我需要做的:

编写一个查询,该查询将返回雇员表中按部门分组的最高和最低平均工资。

这是我做的:

SELECT
(SELECT AVG(MIN(salary)) FROM employees GROUP BY department_id) As "Minimum Average salary",
(SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id) As "Maximum Average Salary"
FROM EMPLOYEES

但它不断给我返回超过 1 行的结果。我不能使用 LIMIT 2,如果我使用 LIMIT 查询会出错。

我也尝试了以下查询,但出现错误:缺少表达式。

SELECT
AVG(SELECT MIN(salary) FROM employees GROUP BY department_id)) As "Minimum Average salary",
AVG((SELECT MAX(salary) FROM employees GROUP BY department_id)) As "Maximum Average Salary"
FROM EMPLOYEES
4

4 回答 4

4

不需要内联视图 - 这有效:

select
  min(avg(salary)),
  max(avg(salary))
from
 employees
group by
  dept_id;

http://sqlfiddle.com/#!4/eff67/3

于 2013-05-05T13:02:59.790 回答
1

使用子查询检索所有平均工资。然后外部查询可以获取最小值和最大值:

select  min(AvgSalary)
,       max(AvgSalary)
from    (
        select  avg(salary) as AvgSalary
        from    employees
        group by
                department_id
        ) SubQueryAlias
于 2013-05-05T12:59:11.317 回答
1

首先,它返回与 EMPLOYEES 表中的所有记录一样多的原因很简单;因为 group by 在您的内部子查询中,它不适用于您的主查询。实际上,您的子查询是按表中的每一行执行的,并且每行返回结果。我认为这是您需要的正确查询:

SELECT AVG(min_salary) As "Minimum Average salary", AVG(max_salary) As "Maximum Average Salary"
FROM
(SELECT MIN(salary) As min_salary, MAX(salary) AS max_salary
 FROM EMPLOYEES
 GROUP BY department_id
)
于 2013-05-05T12:59:24.383 回答
0
select MAX(salary),min(salary), avg(salary), department_id from employees  group by department_id
于 2013-08-20T04:00:21.303 回答