ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
グループ単位に、ソートしたレコードの先頭行に集計関数を使用する( KEEP、FIRST )
スポンサード リンク

グループ単位に、ソートしたレコードの先頭行に集計関数を使用するには、FIRST関数を使用する。

分析関数のFIRSTは、ウィンドウ(window)を操作してレコードの先頭行に集計関数を使用します。

集計関数() KEEP ( DENSE_RANK FIRST 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 first order by years )
  4  over() as max
  5 from emp01;

EMP_ID YEARS SALARY MAX
-----  ----- ------- ----------
E01    3    150     600
E02    7    200     600
E03    7    300     600
E04    7    400     600
E05    3    500     600
E06    3    600     600


 ※列「years」の昇順にソートしたレコードの先頭行なので「years」=3のレコードの中での、最大値を取得するので600となります。


例2) 列「dept_id」別に、列「years」の昇順でソートしたレコードの先頭行で、「salary」の最大値をそれぞれ取得します。

SQL> select
  2  emp_id,dept_id,years,salary,
  3  max( salary ) keep (dense_rank first 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     600
E06    D02    3     600     600
E04    D02    7     400     600
E05    D03    3     500     500
E03    D03    7     300     500



スポンサード リンク


グループ単位に、レコード件数を取得する( COUNT )
グループ単位に、最大値を取得する( MAX )
グループ単位に、平均値を取得する( AVG )
グループ単位に、最小値を取得する( MIN )
グループ単位に、集計する( SUM )
グループ単位に、ランキングを取得する( RANK、DENSE_RANK )
グループ単位に、パーセントランクを取得する( PERCENT_RANK )
グループ単位に、ソートしたレコードの先頭行に集計関数を使用する( KEEP、FIRST )
グループ単位に、ソートしたレコードの最終行に集計関数を使用する( KEEP、LAST )
グループ単位に、ソートしたレコードの先頭行の値を取得する( FIRST_VALUE )
グループ単位に、ソートしたレコードの最終行の値を取得する( LAST_VALUE )
グループ単位に、検索したレコードのn行前のデータを取得する( LAG )
グループ単位に、検索したレコードのn行後のデータを取得する( LEAD )
グループ単位に、検索レコードに順番を付ける( ROW_NUMBER )
グループ単位に、先頭から指定件数のレコードを取得する( ROW_NUMBER )
グループ単位に、n件目のレコードからm件目のレコードを取得する( ROW_NUMBER )
グループ単位に、標準偏差を取得する( STDDEV )
グループ単位に、累積標準偏差を取得する( STDDEV_SAMP )
グループ単位に、母集団標準偏差を取得する( STDDEV_POP )
グループ単位に、分散を取得する( VARIANCE )
グループ単位に、累積分散を取得する( VAR_SAMP )
グループ単位に、母集団分散を取得する( VAR_POP )
グループ単位に、相関係数を取得する( CORR )

SQL(DML) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ