2017-09-05 5 views
-1
EMPNO ENAME JOB   MGR  HIREDATE  SAL COMM DEPTNO 
7839 KING PRESIDENT  -  11/17/1981 5000 -  10 
7698 BLAKE MANAGER  7839 05/01/1981 2850 -  30 
7782 CLARK MANAGER  7839 06/09/1981 2450 -  10 
7566 JONES MANAGER  7839 04/02/1981 2975 -  20 
7788 SCOTT ANALYST  7566 12/09/1982 3000 -  20 
7902 FORD ANALYST  7566 12/03/1981 3000 -  20 
7369 SMITH CLERK  7902 12/17/1980 800  -  20 
7499 ALLEN SALESMAN 7698 02/20/1981 1600 300  30 
7521 WARD SALESMAN 7698 02/22/1981 1250 500  30 

ジョブの数は、Oracle 11gのでは、私は仕事、何も彼らのEMPと従業員の名前を表示する必要がない従業員のEMPNO、ENAME表示デフォルトの表empで> 1

表のように、3人のマネージャーと2人のセールスマンがename、empで印刷する必要があります。社長のような1つの仕事は省略しなければならない。

+2

常にタグを1つだけ付けてくださいRDBMS –

+1

参照:[私は非常に単純なSQLクエリと思われるMCVEを提供するのはなぜですか?](https://meta.stackoverflow .com/questions/333952/what-should-i-provide-an-mcve-for-what-to-me-to-be-a-very-simple-sql-query) – Strawberry

+0

私はあなたを正しくしました: CLERKはクエリによって返されるべきではありませんが、ANALYSTは返されますか? –

答えて

0

subselectは1回以上発生するJOBを返します。以下のように、あなたは数を計算し、そのより大きいかどうかを確認することができEMPからジョブを選択するサブクエリが必要になります

SELECT EMPNO,ENAME 
    FROM emp 
WHERE JOB IN (SELECT JOB 
       FROM emp 
      GROUP BY JOB 
       HAVING COUNT(*) > 1 
      ) 
0



外側の選択は、今だけのジョブのこのサブセットであるEMPNOsを返します。 1.サブクエリの前に、empから表示するためにEMPNOとENAMEを選択します。

SELECT EMPNO, ENAME 
    FROM emp 
    WHERE JOB IN (SELECT JOB 
    FROM emp 
    GROUP BY JOB 
    HAVING COUNT(*) > 1) 
0

あなたは、GROUP BYを試すことができます。

 
SELECT empno,ename, count(job) 
FROM emp 
GROUP BY job 
HAVING count(job)>1 

COUNT(JOB):ジョブによって同じ仕事 GROUPと従業員の数:基、例えば仕事で結果を。 3人のマネージャーと2人のセールスマン....

+0

この構文は、Oracle用には動作しません – APC

+0

@APCありがとう、それはMySQLのための仕事です –

関連する問題