2015-10-18 4 views
1

Я полный новичок в MySql, и сейчас я боюсь упражнений. У меня есть таблица сотрудников, которые работают в разных отделах, и их заработок и т. Д .; Я застрял в следующем вопросе:MySql Command Line Beginner Advice

Найдите тех сотрудников, которые работают больше, чем средний рабочий день в их отделе.

Я пробовал:

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 в подзапросе). При фильтрации в подзапросе только для родительского отдела будет только один avg. Пример:

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