【问题标题】:Oracle - Finding the job with most project countsOracle - 寻找项目数量最多的工作
【发布时间】:2020-02-12 01:40:00
【问题描述】:

所以,我对 Oracle 和 SQL 还是很陌生,我遇到了一个关于有和 max 子句的问题 - 我一直在尝试提取具有大多数正在处理它们的作业名称的项目,并按作业名称对它们进行分组. 我可以很好地访问数据,直到有子句,它不呈现任何行选择查询。我不知道我做错了什么。

    SELECT PROJ_EMP.PROJNO, EMP.JOB, COUNT(EMP.JOB)
FROM EMP, PROJ_EMP
WHERE EMP.EMPNO = PROJ_EMP.EMPNO 
GROUP BY PROJ_EMP.PROJNO, EMP.JOB
HAVING COUNT(EMP.JOB) = 
(SELECT MAX(employees) FROM (SELECT COUNT(PROJ_EMP.PROJNO) AS employees FROM
EMP, PROJ_EMP WHERE EMP.EMPNO = PROJ_EMP.EMPNO GROUP BY EMP.JOB))

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。为什么不使用正确、明确、标准 JOIN 语法?
  • 我的数据库中的表等数据示例?我应该在这里复制吗?所需的结果将是 EMP.JOB 的渲染,即“Manager”和 PROJ_EMP.PROJNO“6”,这将说明大多数 EMP.JOB =“Manager”的员工在 PROJ_EMP.PROJNO“6”上工作。至于为什么我对 JOIN 子句使用简化的语法——这就是我被教导的方式,我应该考虑切换到标准 JOIN 吗?
  • 欢迎来到 Stack Overflow。请不要在 cmets 中留下重要信息。相反,请使用标签下方的edit 按钮来编辑您的问题。谢谢。

标签: sql oracle count max having


【解决方案1】:

我认为您需要在特定项目中找到最多的工作。

使用解析函数如下:

SELECT PROJNO,JOB,CNT FROM
(SELECT PROJ_EMP.PROJNO, EMP.JOB, 
        COUNT(EMP.JOB) CNT,
        ROW_NUMBER() OVER (PARTITION BY PROJ_EMP.PROJNO ORDER BY COUNT(EMP.JOB) DESC) AS RN
  FROM EMP JOIN PROJ_EMP
    ON EMP.EMPNO = PROJ_EMP.EMPNO 
GROUP BY PROJ_EMP.PROJNO, EMP.JOB)
WHERE RN = 1

每日提示:始终使用标准 ANSI 联接。

干杯!!

【讨论】:

  • 非常感谢!这表明我还有很多东西要学,接下来我会研究分析函数,我现在还不会自己想出这个。干杯!
  • 如果这个答案解决了你的问题,那么请accept它,这样你的问题就会被标记为已解决。
猜你喜欢
  • 2020-11-11
  • 2022-07-19
  • 2016-01-31
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多