|
スポンサード リンク
グループ単位に、ソートしたレコードの最終行に集計関数を使用するには、LAST関数を使用する。
分析関数のLASTは、ウィンドウ(window)を操作してレコードの最終行に集計関数を使用します。
集計関数() KEEP
( DENSE_RANK LAST ORDER BY ソート列1,[ソート列2,・・・] )
OVER( [ PARTITION BY 項目1,[項目2,・・・]] ) |
ソート列でソートされたレコードの最終行を、指定した集計関数で集計した結果が返されます。
指定可能な集計関数 : AVG()、COUNT()、MAX()、MIN()、SUM()、STDDEV()、VARIANCE()
OVER()は、PERCENT_RANK関数と一緒に使用します
PRTITION BY句には、グループ化対象項目を指定する
ORDERY BY句には、ソート対象の項目を指定する |
サンプル表「emp01」データ
|
SQL> select * from emp01;
EMP_ID DEPT_ID EMP_NAME YEARS SALARY
----- ----- ---------- ---------- ----------
E01 D01 なまえ1 3 150
E02 D02 なまえ2 7 200
E03 D03 なまえ3 7 300
E04 D02 なまえ4 7 400
E05 D03 なまえ5 3 500
E06 D02 なまえ6 3 600 |
例1) 列「years」の昇順でソートしたレコードの最終行で、「salary」の最大値を取得します。
|
SQL> select
2 emp_id, years, salary,
3 max( salary ) keep ( dense_rank last order by years )
4 over() as max
5 from emp01;
EMP_ID YEARS SALARY MAX
----- ----- ------- ----------
E01 3 150 400
E02 7 200 400
E03 7 300 400
E04 7 400 400
E05 3 500 400
E06 3 600 400
|
※列「years」の昇順にソートしたレコードの最終行なので「years」=7のレコードの中での、最大値を取得するので400となります。
例2) 列「dept_id」別に、列「years」の降順でソートしたレコードの先頭行で、「salary」の最大値をそれぞれ取得します。
|
SQL> select
2 emp_id, dept_id, years, salary,
3 max( salary ) keep ( dense_rank last order by years )
4 over( partition by dept_id ) as max
5 from emp01;
EMP_ID DEPT_ID YEARS SALARY MAX
----- ----- ----- ------- ----------
E01 D01 3 150 150
E02 D02 7 200 400
E06 D02 3 600 400
E04 D02 7 400 400
E05 D03 3 500 300
E03 D03 7 300 300 |
スポンサード リンク
|