MySql命令行初学者建议

时间:2015-10-18 23:09:43

标签: mysql

我是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

任何人都可以帮我指出正确的方向吗?我附上了桌子代码的图片。

Table Image

2 个答案:

答案 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