2016-04-04 18 views
-1

İki tablo Emp ve Dept var ve her departmanda departman adı ile birlikte kaç kişinin çalışacağını göstermeye çalışıyorum, ancak işe yaramayacağım. Bu select count(ename) as count from emp group by deptno; denedi ama alıyorum çıktı şudur:Her departmandaki çalışan sayısını bulun - SQL Oracle

COUNT 
---------- 
    6 
    5 
    3 

Ama aynı zamanda bu departmanların her biri için isim göstermek istiyorum.

empt:

CREATE TABLE EMP 
     (EMPNO NUMBER(4) NOT NULL, 
     ENAME VARCHAR2(10), 
     JOB VARCHAR2(9), 
     MGR NUMBER(4), 
     HIREDATE DATE, 
     SAL NUMBER(7, 2), 
     COMM NUMBER(7, 2), 
     DEPTNO NUMBER(2)); 

INSERT INTO EMP VALUES 
     (7369, 'SMITH', 'CLERK',  7902, 
     TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20); 
INSERT INTO EMP VALUES 
     (7499, 'ALLEN', 'SALESMAN', 7698, 
     TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30); 
INSERT INTO EMP VALUES 
     (7521, 'WARD', 'SALESMAN', 7698, 
     TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); 
INSERT INTO EMP VALUES 
     (7566, 'JONES', 'MANAGER', 7839, 
     TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20); 
INSERT INTO EMP VALUES 
     (7654, 'MARTIN', 'SALESMAN', 7698, 
     TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30); 
INSERT INTO EMP VALUES 
     (7698, 'BLAKE', 'MANAGER', 7839, 
     TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30); 
INSERT INTO EMP VALUES 
     (7782, 'CLARK', 'MANAGER', 7839, 
     TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10); 
INSERT INTO EMP VALUES 
     (7788, 'SCOTT', 'ANALYST', 7566, 
     TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20); 
INSERT INTO EMP VALUES 
     (7839, 'KING', 'PRESIDENT', NULL, 
     TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10); 
INSERT INTO EMP VALUES 
     (7844, 'TURNER', 'SALESMAN', 7698, 
     TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30); 
INSERT INTO EMP VALUES 
     (7876, 'ADAMS', 'CLERK',  7788, 
     TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20); 
INSERT INTO EMP VALUES 
     (7900, 'JAMES', 'CLERK',  7698, 
     TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30); 
INSERT INTO EMP VALUES 
     (7902, 'FORD', 'ANALYST', 7566, 
     TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20); 
INSERT INTO EMP VALUES 
     (7934, 'MILLER', 'CLERK',  7782, 
     TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10); 

Bölümü:

CREATE TABLE DEPT 
     (DEPTNO NUMBER(2), 
     DNAME VARCHAR2(14), 
     LOC VARCHAR2(13)); 

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); 
INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); 
INSERT INTO DEPT VALUES (30, 'SALES',  'CHICAGO'); 
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); 
+5

İpucu: 'JOIN' İşte benim tablolardır. GROUP BY'. –

+1

Herhangi bir sorgu denediniz mi? Eğer evet ise, lütfen buraya gönderin. –

cevap

4

deneyin:

select count(*) as count,dept.DNAME 
from emp 
inner join dept on emp.DEPTNO = dept.DEPTNO 
group by dept.DNAME 
+0

Bu, yalnızca bölüm adları benzersiz ise (yinelenmez), soruda belirtilmemişse doğrudur. –

+0

Evet, örnek verisinde benzersiz oldukları için DEPTNO'yu kaldırdım. –

0
select count(e.empno), d.deptno, d.dname 
from emp e, dep d 
where e.DEPTNO = d.DEPTNO 
group by d.deptno, d.dname; 
0
SELECT d.DEPTNO 
    , d.dname 
    , COUNT(e.ename) AS count 
FROM emp e 
     INNER JOIN dept d ON e.DEPTNO = d.deptno 
GROUP BY d.deptno 
     , d.dname;