分析関数でMAXを使用するサンプルSQLを紹介します。
分析関数 MAX() サンプルSQL
前提条件
SELECT
EMP_ID AS 従業員ID
,DEPT_ID AS 部署ID
,SALARY AS 年収
FROM
TB_SALARY
;
従業員ID 部署ID 年収
---------- ------ -------
1 01 3000000
2 01 4000000
3 01 5000000
4 02 6000000
5 02 6500000
6 02 7000000
6行が選択されました。
従業員が所属する部署の最大年収を求める
SELECT EMP_ID AS 従業員ID ,DEPT_ID AS 部署ID ,SALARY AS 年収 ,MAX(SALARY) OVER(PARTITION BY DEPT_ID)AS 部署の最大年収 FROM TB_SALARY ; 従業員ID 部署ID 年収 部署の最大年収 ---------- ------ -------- ------------------ 1 01 3000000 5000000 2 01 4000000 5000000 3 01 5000000 5000000 4 02 6000000 7000000 5 02 6500000 7000000 6 02 7000000 7000000 6行が選択されました。
『MAX(SALARY)』で給与の最大値を求めています。そして、『OVER(PARTITION BY DEPT_ID)』を指定することで、部署ID毎の最大年収を求めるという意味になります。
年収「700万」以上である従業員が所属している部署の従業員全員を抽出する
SELECT
VW.EMP_ID AS 従業員ID
,VW.DEPT_ID AS 部署ID
,VW.SALARY AS 年収
FROM
(
SELECT
EMP_ID AS EMP_ID
,DEPT_ID AS DEPT_ID
,SALARY AS SALARY
,MAX(SALARY) OVER(PARTITION BY DEPT_ID)
AS MAX_SALARY
FROM
TB_SALARY
) VW
WHERE
VW.MAX_SALARY >= 7000000
;
従業員ID 部署ID 年収
---------- -------- ----------
4 02 6000000
5 02 6500000
6 02 7000000
分析関数を使ったSQLを副問合せにすることで、分析関数の抽出結果(集計結果)を抽出条件として絞り込み検索を行う事ができます。