显示工作计数> 1的员工的enno

时间:2017-09-05 14:22:15

标签: oracle greatest-n-per-group

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

在默认表emp中,在oracle 11g中,我需要显示那些具有emp no的员工的姓名,其中作业大于1。

如表中所示,有3名经理和2名推销员,应使用ename,emp打印。像总统这样只有1的工作应该省略。

3 个答案:

答案 0 :(得分:0)

子选择将返回多次出现的JOB。

外部选择现在只返回JOB的这个子集中的EMPNO

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

答案 1 :(得分:0)

如下所示,您需要一个子查询来从emp中选择作业,您可以在其中计算计数并检查其是否大于1.在子查询之前,您将选择EMPNO和ENAME以显示来自emp。

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

答案 2 :(得分:0)

您可以尝试GROUP BY:

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

COUNT(JOB):具有相同工作的员工人数 GROUP BY Job:按工作分组结果,例如。 3名经理和2名推销员......