Подзапросы AVG результата SUM

У меня проблема с подзапросами. поэтому я хочу перечислить сотрудников, чье общее количество отработанных часов больше, чем среднее общее количество отработанных часов для всех сотрудников но с помощью этого кода он сравнивает часы, отработанные для одного сотрудника, с часами другого сотрудника. Итак, подведем итог: общее количество отработанных часов сотрудника> среднее всего отработанного часа сотрудника -> ГДЕ hrs_worked > AVG(SUM(HRS_WORKED)) это то, что я хочу.

SELECT employee.emp_id,
       employee.emp_name,
       SUM(action.hrs_worked) AS "Total Hours Worked"
FROM action
INNER JOIN allocation ON action.act_id = allocation.act_id
AND action.emp_id = allocation.emp_id
INNER JOIN employee ON allocation.emp_id = employee.emp_id
WHERE action.hrs_worked >
    (SELECT AVG(action.hrs_worked)
     FROM action)
GROUP BY employee.emp_id,
         employee.emp_name
ORDER BY SUM(action.hrs_worked) DESC

2 ответа

Должно быть что-то вроде этого:

SELECT * 
FROM  Orders
........... 
WHERE Price > (
           SELECT AVG(sum_pr) 
           FROM (
              SELECT SUM(Price) as sum_pr 
              FROM Orders 
              GROUP BY Price
                 )x
               )

Давайте оставим имя сотрудника вне этого. Общее количество часов работ составляет:

SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
FROM action a 
GROUP by a.emp_id;

Чтобы получить значение больше среднего:

SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
FROM action a 
GROUP by a.emp_id;
HAVING TotalHoursWorked > (SELECT avg(TotalHoursWorked)
                           FROM (SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
                                 FROM action a 
                                 GROUP by a.emp_id
                                ) a2
                           );

Ты можешь использовать join ввести остальные поля, которые вы хотите.

На основании вашего запроса, я не вижу, как allocation используется.

Другие вопросы по тегам