【发布时间】:2020-08-09 13:49:50
【问题描述】:
我正在尝试获取一个部门的平均工资,然后用它来获取任何高于该平均工资的员工。
我的查询是:
select e.first_name, e.salary, e.department_id from
employees as e
inner join departments as d
on d.id = e.department_id
where salary > (select avg(e.salary)
from employees as e
where e.department_id = d.id
group by e.department_id);
但它只返回一个结果“Ian”。
first_name | salary | department_id
------------+--------+---------------
Ian | 80000 | 2
(1 row)
avg
--------------------
35000.000000000000
(1 row)
id | first_name | last_name | salary | department_id
----+------------+-----------+--------+---------------
1 | John | Smith | 20000 | 1
2 | Ava | Muffinson | 10000 | 5
3 | Cailin | Ninson | 30000 | 2
4 | Mike | Peterson | 20000 | 2
5 | Ian | Peterson | 80000 | 2
6 | John | Mills | 50000 | 3
(6 rows)
id | name
----+-------------
1 | Reporting
2 | Engineering
3 | Marketing
4 | Biz Dev
5 | Silly Walks
(5 rows)
我做错了什么? 谢谢!
【问题讨论】:
-
您的查询很好。对于您的示例数据,
Ian是唯一应该返回的结果。 -
请注意,您不需要在子查询中使用
group by,因为您希望汇总所有结果。
标签: sql postgresql