2016-05-04 25 views
0

我有以下表格。用於檢索在人數超過5的部門中工作的員工的詳細信息的SQL查詢

     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個以上的頭數的部門工作的員工的詳細信息。(如DEPTNO 1和DEPTNO 2有5名員工在其中工作)

你能幫我用Oracle查詢來檢索嗎?提前致謝。

+0

@GordonLinoff我正在嘗試這個'select * from staff其中count(staffno)group by deptno having count(staffno)> = 5;'但是這給了一個錯誤,那就是組函數在這裏是不允許的。 –

+0

您應該始終輸入您嘗試的任何查詢。它有助於識別出錯的地方。 – Adish

回答

2

您需要創建子查詢或執行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) 
+0

感謝@Juan,工作起來很有魅力,子查詢版本很容易理解。 –

0

如果你想在員工詳細信息,然後你真正想要的解析函數:

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

它應該是這樣的

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

謝謝,這解決了我的問題。 –

0

這是使用連接(因爲沒有人有),它可以允許你改變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 
相關問題