Подзапросы 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
используется.