1

デモの HR スキーマで従業員数が最も多い部門を見つけようとしています。

SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME, MAX(COUNT(e.EMPLOYEE_ID))
FROM departments d INNER JOIN employees e ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
GROUP BY d.DEPARTMENT_ID, d.DEPARTMENT_NAME

スクリプトはなくても機能しMAX()ます。

4

6 に答える 6

2

現在のクエリを ( を除いて) ラップMAXし、人数が最大の部門グループを選択できます。

WITH CTE (DEPARTMENT_ID, DEPARTMENT_NAME, empCount) AS
(
    SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME, COUNT(e.EMPLOYEE_ID) AS empCount
    FROM departments d INNER JOIN employees e ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
    GROUP BY d.DEPARTMENT_ID, d.DEPARTMENT_NAME
)
SELECT DEPARTMENT_ID, DEPARTMENT_NAME
FROM CTE
WHERE empCount = (SELECT MAX(t.empCount) FROM CTE t)
于 2016-01-05T01:10:32.720 に答える
1

次のように、count(e.EMPLOYEE_ID) で降順で部門をフェッチし、結果を最初の行のみに制限して ROWNUM を使用することができます。

select * from (select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, count(e.EMPLOYEE_ID) cnt 
from departments d inner join employees e on d.DEPARTMENT_ID = e.DEPARTMENT_ID 
group by d.DEPARTMENT_ID, d.DEPARTMENT_NAME order by 3 desc) where ROWNUM=1

率直に言って、私のマシンには Derby DB しかインストールされておらず、これは ROWNUM 疑似列をサポートしていないため、Oracle DB に対してこのクエリをテストできませんでした。

于 2016-01-05T04:22:18.790 に答える
1

クエリを見つけてください:

SELECT *
FROM
(
SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME ,COUNT(e.EMPLOYEE_ID) EMP_COUNT
FROM HR.departments d
INNER JOIN HR.employees e
ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
GROUP BY d.DEPARTMENT_ID, d.DEPARTMENT_NAME
ORDER BY EMP_COUNT DESC
)
WHERE ROWNUM=1
于 2016-01-05T09:59:29.013 に答える
0

COUNT() OVER()分析関数を使用できます。

たとえば、スキーマで標準employeesテーブルを使用すると、次のようになります。HR

SQL> SELECT DISTINCT department_id,
  2    COUNT(department_id) OVER(PARTITION BY department_id) rn
  3  FROM hr.employees t
  4  ORDER BY rn DESC;

DEPARTMENT_ID         RN
------------- ----------
           50         45
           80         34
           30          6
          100          6
           60          5
           90          3
           20          2
          110          2
           10          1
           40          1
           70          1
                       0

12 rows selected.

SQL>

上記の結果セットから最大従業員数を検索するにはdepartment_id:

SQL> SELECT department_id
  2  FROM
  3    (SELECT department_id,
  4      row_number() OVER(ORDER BY rn DESC) rn
  5    FROM
  6      ( SELECT DISTINCT department_id,
  7        COUNT(department_id) OVER(PARTITION BY department_id) rn
  8      FROM hr.employees t
  9      )
 10    )
 11  WHERE rn = 1;

DEPARTMENT_ID
-------------
           50

SQL>
于 2016-01-05T08:25:34.073 に答える
0

ORDER BYのような句を使用します。

select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, 
count(e.EMPLOYEE_ID) as employe_count
from departments d
inner join employees e
on d.DEPARTMENT_ID = e.DEPARTMENT_ID
group by d.DEPARTMENT_ID, d.DEPARTMENT_NAME
order by count(e.EMPLOYEE_ID) desc
offset 0 rows fetch next 1 rows only;

注:OFFSETおよびFETCH NEXTは、Oracle 12.1

于 2016-01-05T01:11:53.337 に答える