2017-09-05 1 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 

Dans le tableau par défaut emp, 11g oracle, je dois afficher les noms de ces employés avec leur emp non, où le travail est plus grand que 1.afficher le empno, Ename des employés qui, où le nombre d'emplois> 1

Comme dans le tableau il y a 3 directeurs et 2 vendeurs qui devraient être imprimés avec ename, emp. Job comme président qui est juste 1 devrait être omis.

+2

s'il vous plaît toujours juste un tag RDBMS –

+1

Voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple?] (Https: //meta.stackoverflow .com/questions/333952/pourquoi-devrais-je-fournir-un-mcve-pour-ce-qui-me-semble-à-être-un-très-simple-sql-query) – Strawberry

+0

ai-je bien compris: CLERK ne devrait pas être retourné par la requête, mais ANALYST devrait être retourné? –

Répondre

0

La sous-sélection renverra simplement les Jobs qui se produisent plus d'une fois.

La sélection externe va maintenant simplement revenir EMPNOs qui sont dans ce sous-ensemble de JOBs

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

Comme ci-dessous, vous aurez besoin d'un sous-requête pour sélectionner l'emploi de emp où vous pouvez calculer le nombre et vérifier si son supérieur 1. Avant la sous-requête, vous sélectionnez EMPNO et ENAME pour afficher à partir de emp.

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

Vous pouvez GROUP BY:

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

COUNT (JOB): le nombre d'employés avec le même emploi GROUP BY Job: groupe les résultats par emploi, par exemple. 3 gestionnaires et 2 vendeurs ....

+0

Cette syntaxe ne fonctionnera pas pour Oracle – APC

+0

@APC merci, c'est pour Mysql –