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

ORACLE SQL リファレンス

Web oracle.se-free.com
小計行とグループ化された集計行を区別する( GROUPING、GROUPING_ID )
スポンサード リンク

ROLLUPCUBEで算出した、小計行とグループ化された集計行を区別するには、GROUPING関数、または、GROUPING_ID関数を使用する。

GROUPING( 小計項目 ) 小計行の場合は「1」、グループ化された集計行の場合は「0」を返します。
GROUPING_ID( 小計項目1,
          [小計項目2,・・・] )
小計行の場合は「1以上」、グループ化された集計行の場合は「0」を返します。


サンプル表「emp」データ

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) 列「dept_id」、「years」別に、列「salary」の集計を取得し、列「dept_id」別に小計を算出する。
     最後に合計を算出する。(GROUPING)

SQL> select
  2  dept_id, years, sum( salary ), grouping( years )
  3 from emp01
  4 group by rollup( dept_id, years );

DEPT_ID YEARS  SUM(SALARY) GROUPING(YEARS)
------ ------ -----------  ---------------
D01    3      150        0
D01           150        1 −−−−− 小計行
D02    3      600        0
D02    7      600        0
D02          1200       1 −−−−− 小計行
D03    3      500        0
D03    7      300        0
D03          800        1 −−−−− 小計行
            2150       1 −−−−− 合計行


 ※GROUPING関数には引数の指定は1つのみ可能。
  グルーピングの最小単位の項目(上記例では「years」)を指定する。


スポンサード リンク


例2) 例1で、集計行と合計行のみ表示する。(GROUPING)

SQL> select
  2  dept_id, years, sum( salary ), grouping( years )
  3 from emp01
  4 group by rollup( dept_id, years )
  5 having grouping( years ) > 0;

DEPT_ID YEARS SUM(SALARY) GROUPING(YEARS)
------ ------ -----------  ---------------
D01         150         1
D02         1200        1
D03         800         1
            2150        1




例3) 列「dept_id」、「years」別に、列「salary」の集計を取得し、列「dept_id」別に小計を算出する。
    最後に合計を算出する。(GROUPING_ID)

SQL> select
  2  dept_id, years ,sum( salary ), grouping_id( dept_id, years )
  3 from emp01
  4 group by rollup( dept_id, years );

DEPT_ID YEARS  SUM(SALARY) GROUPING_ID(DEPT_ID,YEARS)
------ -------  ----------- --------------------------
D01    3       150        0
D01           150        1 −−−−− 小計行
D02    3       600        0
D02    7       600        0
D02           1200       1 −−−−− 小計行
D03    3       500        0
D03    7       300        0
D03           800        1 −−−−− 小計行
             2150       3 −−−−− 合計行



例4) 例3で、集計行と合計行のみ表示する。(GROUPING_ID)

SQL> select
  2  dept_id, years, sum( salary ), grouping_id( years )
  3 from emp01
  4 group by rollup( dept_id, years )
  5 having grouping_id( years ) > 0;

DEPT_ID YEARS  SUM(SALARY) GROUPING_ID(YEARS)
------ ------- -----------  ------------------
D01           150        1
D02           1200        1
D03           800        1
             2150        1




スポンサード リンク


レコード件数を取得する( COUNT )
最大値を取得する( MAX )
平均値を取得する( AVG )
最小値を取得する( MIN )
グループ単位に集計する( SUM、GROUP BY )
グループ単位に集計結果の値から指定条件でレコードを抽出する( HAVING )
ランキング(仮説ランク)を取得する( RANK、DENSE_RANK )
パーセントランク(仮説ランク)を取得する( PERCENT_RANK )
ソートしたレコードの先頭行に集計関数を使用する( KEEP、FIRST )
ソートしたレコードの最終行に集計関数を使用する( KEEP、LAST )
小計を計算する( ROLLUP )
クロス集計する( CUBE )
小計行とグループ化された集計行を区別する( GROUPING、GROUPING_ID )
標準偏差を取得する( STDDEV )
累積標準偏差を取得する( STDDEV_SAMP )
母集団標準偏差を取得する( STDDEV_POP )
分散を取得する( VARIANCE )
累積分散を取得する( VAR_SAMP )
母集団分散を取得する( VAR_POP )
中央値を取得する( MEDIAN )
相関係数を取得する( CORR )

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