データベース/MySQL、PostgreSQL、SQLite

Oracle10gでSQL - GROUP BY

SQLのSELECT文で使用するGROUP BY句について解説します。

執筆者:堀江 美彦

Oracle10gでSQLを試す

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;
EMP表のJOB(職種)ごとの人数をカウントしています。

SELECTの後ろの列名に「グループ化した列」または「集計関数で集計した列でない列」を指定したためにエラーとなる悪い例です。

GROUP BY句はORDER BY句と組み合わせて使うことも可能です。
上図のSQLではEMP表のJOB(職種)ごとの人数をカウントし、かつ、職種ごとの人数が多いものから表示しています。

EMP表のJOB(職種)ごとのSAL(給与)の合計を算出し、かつ、SALの合計が大きいものから表示しています。

Oracle10gでSQLを試す関連記事一覧

Oracle10g関連記事一覧

【編集部おすすめの購入サイト】
Amazonでデータベース関連の書籍をチェック!楽天市場でデータベース関連の書籍をチェック!
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます