分析関数で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を副問合せにすることで、分析関数の抽出結果(集計結果)を抽出条件として絞り込み検索を行う事ができます。