繁体   English   中英

SQL-计算最大员工人数并使用子查询排除字符串

[英]SQL - counting max number of employees and excluding string using subqueries

这是我的两个表:

雇员

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

department_id department_name      address           
------------- -------------------- --------------------
   10 ACCOUNTING           NEW YORK            
   20 RESEARCH             DALLAS              
   30 SALES                CHICAGO             
   40 IT                   DALLAS              
   50 EXECUTIVE            NEW YORK            
   60 MARKETING            CHICAGO     

我需要使用子查询(而不是联接)编写一条语句,以显示拥有最大员工人数的所有部门(达拉斯的部门除外)的名称和地址。 除字符串“ DALLAS”外,我无法进行任何硬编码

结果应如下所示:

DEPARTMENT_NAME      ADDRESS            
-------------------- --------------------
EXECUTIVE            NEW YORK             
SALES                CHICAGO

我在不加入连接的情况下无所适从。 这是我的三个尝试:

SELECT department_name, address
FROM   department
WHERE  department_id NOT IN 
                (SELECT     department_id 
             FROM       department
             WHERE  UPPER(address) + 'DALLAS')
ORDER BY department_name;

SELECT department_name, address
FROM department
WHERE  department_id NOT IN 
                (SELECT     department_id 
             FROM       department
             WHERE  UPPER(address) = 'DALLAS')
AND department_id > ALL
(select COUNT(department_id) FROM employee GROUP BY department_id)
ORDER BY department_id; 


select *
  from department
 where department_id in (select department_id
                           from employee
                          group by department_id
                         having count(*) = (select max(num)
                                             from (select     department_id,
                                                          count(*) as num
                                                     from employee_tbl
                                                    where address !=     'DALLAS'
                                                    group by     department_id)));

谁能告诉我我是否正在靠近并引导我朝正确的方向前进? 谢谢

员工人数最多的部门(使用单表扫描):

SELECT department_id
FROM   (
  SELECT department_id,
         RANK() OVER ( ORDER BY num_employees DESC ) AS rnk
  FROM   (
    SELECT department_id,
           COUNT(1) AS num_employees
    FROM   employees
    GROUP BY department_id
  )
)
WHERE  rnk = 1;

查找不在DALLAS的部门:

SELECT department_id
FROM   departments
WHERE  address <> 'DALLAS'

因此,将两者结合起来:

SELECT department_id
FROM   (
  SELECT department_id,
         RANK() OVER ( ORDER BY num_employees DESC ) AS rnk
  FROM   (
    SELECT department_id,
           COUNT(1) AS num_employees
    FROM   employees
    WHERE  department_id IN (
      SELECT department_id
      FROM   departments
      WHERE  address <> 'DALLAS'
    )
    GROUP BY department_id
  )
)
WHERE  rnk = 1;

也许像这样?

select department_name, address
from department
where department_id in 
        (SELECT e.department_id
        FROM employee e
        group by e.department_id
        having count(*) = (
                           select max(count(e2.employee_id))
                           FROM employee e2
                           WHERE  department_id NOT IN (SELECT     department_id 
                                     FROM       department
                                     WHERE  UPPER(address) = 'DALLAS')
                           group by e2.department_id
                           )                   
       )
       and UPPER(address) != 'DALLAS'

但这不是飞机上最好的查询:)很奇怪

在您的查询Ellen中,我不知道表格的位置

employee_tbl

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM