在子查询中使用多个表

Posted

技术标签:

【中文标题】在子查询中使用多个表【英文标题】:Use multiple tables in sub queries 【发布时间】:2018-11-30 12:15:29 【问题描述】:

我需要显示员工的任务数,但只显示任务数最多的员工。我遇到的问题是,如果只有员工的任务数量最多,我无法弄清楚如何显示。

任务中的任务数,员工通过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】:

您可以使用窗口函数。我会这样写:

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 语法的使用。

【讨论】:

它说 MAX_NUMBER_OF_TASKS 是无效标识符 @Rubikted 。 . .此查询中没有任何内容称为 MAX_NUMBER_OF_SECTIONS 我的意思是 MAX_NUMBER_OF_TASKS 是无效标识符

以上是关于在子查询中使用多个表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多表子查询

Flask 反向查询

连接两个表子查询

MySQL 子查询 派生表子查询错误

如何在子查询 SQL Server 中选择多个项目

如何在子查询的 WHERE 子句中使用来自 UNNEST 的多个值?