2015-10-18 91 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