2015-10-18 58 views
1

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

+0

'SELECT * FROM details WHERE hours> AVG(hours)'? – Cyclonecode

回答

4

您遇到的错误是因为条件(其中小时>(子查询))预计,标值(只有一个值)和你正在返回更多(一个avg/group--这是因为子查询中的group by子句)。通过仅在子部门中过滤父部门,将只有一个平均值。像这样:

Select * 
from details d 
where d.hours > (select avg(hours) 
    from details 
    where department = d.department 
    group by department); 
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