2016-04-07 83 views
0

问题:编写SQL SELECT语句以显示拥有最多员工数的所有部门(达拉斯的部门除外)的名称和地址。按部门名称升序排列输出。SQL开发人员查询

创建部门表

CREATE TABLE department 
(DEPARTMENT_ID   NUMBER(4)  PRIMARY KEY, 
DEPARTMENT_NAME  VARCHAR2(20) NOT NULL UNIQUE, 
ADDRESS    VARCHAR2(20) NOT NULL); 

部填充表

INSERT INTO department VALUES(10, 'ACCOUNTING', 'NEW YORK'); 
INSERT INTO department VALUES(20, 'RESEARCH', 'DALLAS'); 
INSERT INTO department VALUES(30, 'SALES', 'CHICAGO'); 
INSERT INTO department VALUES(40, 'IT', 'DALLAS'); 
INSERT INTO department VALUES(50, 'EXECUTIVE', 'NEW YORK'); 
INSERT INTO department VALUES(60, 'MARKETING', 'CHICAGO'); 
COMMIT; 

创建EMPLOYEE表

CREATE TABLE employee 
(EMPLOYEE_ID NUMBER(4)  PRIMARY KEY, 
EMPLOYEE_NAME VARCHAR2(20) NOT NULL, 
JOB   VARCHAR2(50) NOT NULL, 
MANAGER_ID NUMBER(4), 
HIRE_DATE  DATE   NOT NULL, 
SALARY  NUMBER(9, 2) NOT NULL, 
COMMISSION NUMBER(9, 2), 
DEPARTMENT_ID NUMBER(4) REFERENCES department(DEPARTMENT_ID)); 

填充EMPLOYEE表

INSERT INTO employee 
VALUES(7839, 'KING', 'PRESIDENT', NULL, '20-NOV-01', 5000, NULL, 50); 
INSERT INTO employee 
VALUES(7596, 'JOST', 'VICE PRESIDENT', 7839, '04-MAY-01', 4500, NULL, 50); 
INSERT INTO employee 
VALUES(7603, 'CLARK', 'VICE PRESIDENT', 7839, '12-JUN-01', 4000, NULL, 50); 
INSERT INTO employee 
VALUES(7566, 'JONES', 'PUBLIC ACCOUNTANT', 7596, '05-APR-01', 3000, NULL,   10); 
INSERT INTO employee 
VALUES(7886, 'STEEL', 'PUBLIC ACCOUNTANT', 7566, '08-MAR-03', 2500, NULL, 10); 
INSERT INTO employee 
VALUES(7610, 'WILSON', 'ANALYST', 7596, '03-DEC-01', 3000, NULL, 20); 
INSERT INTO employee 
VALUES(7999, 'WOLFE', 'ANALYST', 7610, '15-FEB-02', 2500, NULL, 20); 
INSERT INTO employee 
VALUES(7944, 'LEE', 'ANALYST', 7610, '04-SEP-06', 2400, NULL, 20); 
INSERT INTO employee 
VALUES(7900, 'FISHER', 'SALESMAN', 7603, '06-DEC-01', 3000, 500, 30); 
INSERT INTO employee 
VALUES(7921, 'JACKSON', 'SALESMAN', 7900, '25-FEB-05', 2500, 400, 30); 
INSERT INTO employee 
VALUES(7952, 'LANCASTER', 'SALESMAN', 7900, '06-DEC-06', 2000, 150, 30); 
INSERT INTO employee 
VALUES(7910, 'SMITH', 'DATABASE ADMINISTRATOR', 7596, '20-DEC-01', 2900,  NULL, 40); 
INSERT INTO employee 
VALUES(7788, 'SCOTT', 'PROGRAMMER', 7910, '15-JAN-03', 2500, NULL, 40); 
INSERT INTO employee 
VALUES(7876, 'ADAMS', 'PROGRAMMER', 7910, '15-JAN-03', 2000, NULL, 40); 
INSERT INTO employee 
VALUES(7934, 'MILLER','PROGRAMMER', 7876, '25-JAN-02', 1000, NULL, 40); 
INSERT INTO employee 
VALUES(8000, 'BREWSTER', 'TBA', NULL, '22-AUG-13', 2500, NULL, NULL); 
COMMIT; 

查询我编写的代码如下,它可以很好地找到DALLAS部门的最大雇员人数,但是我想消除DALLAS并找到其中有最多员工数量的部门(芝加哥和纽约)。任何人都可以请帮我吗?

SELECT d.department_id, d.department_name, COUNT(*) 
FROM  department d 
INNER JOIN employee e 
ON  d.department_id = e.department_id 
GROUP BY d.department_id, d.department_name 
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) 
FROM  employee 
GROUP BY department_id) 
ORDER BY department_id; 

回答

0

您可以使用排名分析功能:

select * 
from (
    select department_id, department_name, rank() over (order by cnt desc) rnk 
    from(
     SELECT d.department_id, d.department_name, COUNT(*) cnt 
     FROM  department d 
     INNER JOIN employee e 
     ON  d.department_id = e.department_id 
     GROUP BY d.department_id, d.department_name 
    ) 
) 
where rnk = 2 --here you may change to what position you want 
; 
1

使用查询:

SELECT d.department_id, d.department_name, COUNT(*) 
FROM  department d 
INNER JOIN employee e 
ON  d.deptartment_id = e.department_id 
where d.address != 'DALLAS' 
GROUP BY d.department_id, d.department_name 
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) 
FROM  employee 
where department_id not in (select department_id from department where address = 'DALLAS') 
GROUP BY department_id) 
ORDER BY department_id; 

;

+0

谢谢你那么多 –