【问题标题】:SQL Query to Retrieve the details of those employees who works in a department having head count more than 5SQL 查询以检索在员工人数超过 5 人的部门工作的员工的详细信息
【发布时间】:2016-05-05 02:32:41
【问题描述】:

我有下表。

                        STAFF


   STAFFNO STAFFNAME  DESIGNATI     SALARY     DEPTNO
---------- ---------- --------- ---------- ----------
      1000 Rajesh     Manager        35000          1
      1001 Manoj      Caretaker    7420.35          1
      1002 Swati      HR             22500          3
      1003 Suresh     HR             23400          3
      1004 Najim      Mangager       17200          2
      1006 Ritesh     Prgrmr         23500          2
      1005 Nisha      Prgrmr         24852          1
      1007 Rajib      Security        6547          3
      1008 Neeraj     Prgrmr         17300          1
      1009 Dushant    Prgrmr         16500          1
      1010 Pradyut    Manager        26300          2
      1011 Manisha    Prgrmr         21500          2
      1012 Janak      Security        8500          2

现在我想在 oracle (SQL*Plus) 上运行一个查询,在该查询中我可以检索在员工人数为 5 人或更多的部门工作的员工的详细信息。(例如,部门编号 1 和部门编号 2 有 5在其中工作的员工)

您能帮我使用 Oracle 查询来检索它吗?提前致谢。

【问题讨论】:

  • @GordonLinoff 我正在尝试这个select* from staff where count(staffno) group by deptno having count(staffno)>=5;,但这给出了一个错误,即此处不允许使用组功能。
  • 您应该始终输入您尝试过的任何查询。它有助于确定您出错的地方。

标签: sql database oracle


【解决方案1】:

您需要创建子查询或执行JOIN

首先使用JOIN,您需要知道哪个部门拥有超过 5 名员工。

 SELECT DEPTNO
 FROM STAFF
 GROUP BY DEPTNO
 HAVING  COUNT(*) >= 5

现在你加入两个结果

SELECT S.*
FROM STAFF S
JOIN  ( SELECT DEPTNO
        FROM STAFF
        GROUP BY DEPTNO
        HAVING  COUNT(*) >= 5 ) F
ON S.DEPTNO = F.DEPTNO

子查询版本:

SELECT S.*
FROM STAFF S
WHERE S.DEPTNO IN ( SELECT DEPTNO
                    FROM STAFF
                    GROUP BY DEPTNO
                    HAVING  COUNT(*) >= 5 )

【讨论】:

  • 感谢@Juan,工作就像一个魅力,子查询版本很容易理解。
【解决方案2】:

如果您想要员工详细信息,那么您实际上需要一个分析函数:

select s.*
from (select s.*, count(*) over (partition by deptno) as deptcnt
      from staff
     ) s
where deptcnt >= 5;

【讨论】:

    【解决方案3】:

    应该是这样的

    SELECT * FROM STAFF WHERE DEPTNO IN 
    (SELECT DEPTNO FROM STAFF GROUP BY DEPTNO HAVING COUNT(*)>4)
    

    【讨论】:

      【解决方案4】:

      这里使用的是连接(因为没有人拥有),它可以让您更轻松地更改 BI 规则....

      SELECT S.*
      FROM STAFF S
      LEFT JOIN (
        SELECT DEPTNO, COUNT(*) AS C
        FROM STAFF
        GROUP BY DEPTNO
      ) AS D_COUNTS ON S.DEPTNO = D_COUNT.DEPTNO
      WHERE D_COUNTS.C >= 5
      

      或作为 CTE

      WITH D_COUNTS AS
      (
        SELECT DEPTNO, COUNT(*) AS C
        FROM STAFF
        GROUP BY DEPTNO
      )
      SELECT S.*
      FROM STAFF S
      LEFT JOIN D_COUNTS ON S.DEPTNO = D_COUNT.DEPTNO
      WHERE D_COUNTS.C >= 5
      

      【讨论】:

        猜你喜欢
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-13
        • 2018-10-11
        • 2015-10-16
        • 2020-10-08
        相关资源
        最近更新 更多