分析関数でCOUNTを使用するサンプルSQLを紹介します。
分析関数 COUNT サンプルSQL
前提条件
SELECT
EMP_ID AS 従業員ID
, DEPT_ID AS 部署ID
, NAME AS 名前
FROM
TB_EMP
;
従業員ID 部署ID 名前
---------- -------- ------------
1 01 山田太郎
2 01 山田二郎
3 02 田中太郎
4 02 田中二郎
5 02 田中三郎
6行が選択されました。
従業員が所属する部署の人数を求める
SELECT
EMP_ID AS 従業員ID
, DEPT_ID AS 部署ID
, COUNT(*) OVER(PARTITION BY DEPT_ID)
AS 部署毎の従業員人数
FROM
TB_EMP
;
従業員ID 部署ID 部署毎の従業員人数
---------- -------- ------------------
1 01 2
2 01 2
3 02 3
4 02 3
5 02 3
5行が選択されました。
『COUNT(*)』で件数(人数)を求めています。そして、『OVER(PARTITION BY DEPT_ID)』を指定することで、部署ID毎で件数(人数)を求めるという意味になります。
3人以上が所属している部署の従業員を全て抽出
SELECT
VW.EMP_ID AS 従業員ID
,VW.DEPT_ID AS 部署ID
,VW.CNT AS 件数
FROM
(
SELECT
EMP_ID AS EMP_ID
, DEPT_ID AS DEPT_ID
, COUNT(*) OVER(PARTITION BY DEPT_ID)
AS CNT
FROM
TB_EMP
) VW
WHERE
VW.CNT >= 3
;
従業員ID 部署ID 件数
---------- -------- ----------
3 02 3
4 02 3
5 02 3
分析関数を使ったSQLを副問合せにすることで、分析関数の抽出結果(集計結果)を抽出条件として絞り込み検索を行う事ができます。