簡體   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