1.3 GROUP BY --- 取り出した行をグループ化して表示する場合に使用する句
GROUP BY (グループ・バイ)句によりSELECT文で取り出した行を指定された列の値ごとにグループ化して表示することができます。
WHERE句とGROUP BY句を同時に指定した場合はまず、WHERE句に指定した条件でデータが絞り込まれ、 その後、GROUP BYで指定した列によりグループ化がおこなわれます。 グループ化したデータをさらに条件により絞り込みたい場合はHAVING句を使用します。
SELECTの後ろの列名にはグループ化した列、集計関数(*補足)で集計した列のみ指定できます。
(*補足)集計関数とは
集計関数は複数の行を集計し、指定されたグループごとに1つの値を返す関数です。
集計関数ではGROUP BY句によりグループを指定できますが、グループを指定しなかった場合は、テーブル全体が1つのグループみなされます。
集計関数には下記のものがあります。
AVG関数 --- 平均値を算出する
CORR関数 --- 相関係数を算出する
COUNT関数 --- 行数を数える
GROUPING関数 --- 集計行かどうか判定
MAX関数 --- 最大値を得る
MIN関数 --- 最小値を得る
STDDEV関数 --- 標準偏差を算出する
STDDEV_POP関数 --- 母集団標準偏差を算出する
SUM関数 --- 合計値を算出する
VARIANCE関数 --- 分散を算出する
VAR_POP関数 --- 母集団分散を算出する
また、集計関数が使用できるデータ型には制限があります。
COUNT関数は全てのデータ型に対して使用できます。
SUM関数、AVG関数は数値型の列にのみ使用できます。
MIN関数、MAX関数は数値型、日付型、文字列型の列に使用できます。
基本文法
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名
例) EMP表のJOB(職種)ごとの人数をカウントする場合
表名 : EMP
列名 : JOB
SQL : SELECT JOB,COUNT(JOB) FROM EMP GROUP BY JOB;
上図のSQLではEMP表のJOB(職種)ごとの人数をカウントし、かつ、職種ごとの人数が多いものから表示しています。
Oracle10gでSQLを試す関連記事一覧
Oracle10g関連記事一覧