在子查询中使用多个表

时间:2018-11-30 12:15:30

标签: sql oracle count subquery max

我需要显示员工拥有的任务数量,但仅显示任务数量最多的员工。我的问题是,如果只有员工拥有最多的任务,我不知道如何显示。

任务中有任务数,员工通过employee_id链接到任务。

SELECT E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME, 
COUNT(E.TASK_ID)NUMBER_OF_TASKS
 FROM EMPLOYEE E, TASK T
WHERE E.EMPLOYEE_ID = T.EMPLOYEE_ID
GROUP BY E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME;

1 个答案:

答案 0 :(得分:1)

您可以使用窗口功能。我将其写为:

SELECT E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME, T.NUMBER_OF_TASKS
FROM EMPLOYEE E JOIN
     (SELECT T.EMPLOYEE_ID, COUNT(*) as NUMBER_OF_TASKS,
             MAX(COUNT(*)) OVER () as MAX_NUMBER_OF_TASKS
      FROM TASK T
      GROUP BY T.EMPLOYEE_ID
     ) T
     ON E.EMPLOYEE_ID = T.EMPLOYEE_ID
WHERE t.NUMBER_OF_TASKS = t.MAX_NUMBER_OF_TASKS;

哦,还要注意使用正确,明确的标准 JOIN语法。