2016-05-04 13 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 

は今、私は私が5以上のヘッド数を持つ部門で働く従業員の詳細を取得することができているOracleのクエリ(SQL * Plusの)を実行したい。(例えばDEPTNO。1とDEPTNO 2人で5人の従業員が働いています)

これを取得するためにOracleクエリを手伝ってもらえますか?前もって感謝します。

+0

として....簡単にあなたのBIルールを変更することを可能にする(誰もが持っていないので)結合を使用しています@GordonLinoff私はこのselect(* staff * from staff(staffno)count =(staffno)> = 5)というグループを選択しようとしていましたが、ここでグループ機能が許可されていないというエラーが出ています。 –

+0

あなたが試したクエリーを必ず入れてください。あなたが間違っていた場所を特定するのに役立ちます。 – Adish

答えて

2

サブクエリを作成するか、JOINを実行する必要があります。

最初にJOINとすると、どの部門に5人以上の従業員があるかを知る必要があります。

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

ありがとう@元、魅力のように働いて、サブクエリのバージョンは理解しやすいです。 –

0

あなたは従業員の詳細をしたい場合は、あなたが実際に分析関数たい:

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

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 * FROM STAFF WHERE DEPTNO IN 
(SELECT DEPTNO FROM STAFF GROUP BY DEPTNO HAVING COUNT(*)>4) 
+0

ありがとう、それは私の問題を解決しました。 –

0

ここで、それはそれはあなたが

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 
関連する問題