我是MySql的初学者,我现在正在努力锻炼。我有一张在不同部门工作的员工表,以及他们的收入等。我坚持以下问题:
找到工作时间超过其所在部门平均工作时间的员工。
我试过了:
Select * from details where hours > (select avg(hours) from details);
但这只是让我的员工工作超过了所有员工的平均水平。所以我把它改成了:
Select * from details where hours > (select avg(hours) from details group by department);
但这只是结果
Error 1242 <21000> returns more than one row
任何人都可以帮我指出正确的方向吗?我附上了桌子代码的图片。
答案 0 :(得分:4)
您遇到的错误是因为条件(小时&gt;(子查询))期望标量值(只有一个值)并且您返回的更多(一个平均/组 - 这是因为子查询)。通过仅在父部门中对子查询进行过滤,将只有一个平均值。像这样:
Select *
from details d
where d.hours > (select avg(hours)
from details
where department = d.department
group by department);
答案 1 :(得分:1)
加入每个部门的平均时间
Select d.*
from details d
join
(
select department, avg(hours) as avg_hours
from details
group by department
) tmp on d.department = tmp.department
and d.hours > avg_hours