【SQL】 GROUP BY句の使い方(グループ化する)

アイキャッチ画像 SQLリファレンス
SQLリファレンス
この記事は約4分で読めます。
Recommended Articles

【SQL】 GROUP BY句の使い方(グループ化する)

GROUP BY句 : 書式

SELECT 列名1 [,列名2...] FROM 表1 [,表名2...]
WHERE <検索条件> [ AND | OR <検索条件>] GROUP BY <列名>

GROUP BY句 : 解説

GROUP BY句は、GROUP BYキーワードの後ろに指定した列の値により表内のデータをいくつかのグループに分けます。グループは、指定した列の値が同じものを1つのグループとします。そして分割されたグループそれぞれに対して集計を行うことができます。

GROUP BY句 : 使用例 

次の例では、GROUP BY句を使って、表の「カテゴリ」月のカテゴリに従ってグループ分けし、それぞれのグループに商品がいくつあるか、グループ全部の商品がいくつ販売されたかを求めています。

SQL文 
SELECT カテゴリ, COUNT(*) 商品点数, SUM(販売数量) 販売個数
FROM 売上 GROUP BY カテゴリ ;


実行結果

カテゴリ商品点数販売個数
びっくり商品118
奇想天外商品14
非効率商品221
非実用商品222
表:売上
商品名カテゴリ単価販売数量
割れない卵非実用商品30012
温まらない水非効率商品98015
結べない紐非効率商品1506
開けない本非実用商品45010
沈む板奇想天外商品10004
硬いプリンびっくり商品12018

GROUP BY句の記述で気を付けなくてはならないのは、SELECTキーワードの後ろの選択列リストで、GROUP BYに指定した列名以外を記述するときには、集計関数を用いなくてはならないということです。これは、GROUP BY句を記述すると、データがグループ化されるため、グループ化されていないデータと混在できなくなるためです。そのため、グループ化されていないデータは何らかの形でグループ化、または集計したものにする必要があります。GROUP BY句 : 書式(ROLLUP)また、GROUP BY句ではオプションにROLLUPを指定して、集計行をつけることもできます。

GROUP BY句(ROLLUP): 書式

ORACLE GROUP BY ROLLUP (<列名>)
MS-SQL Server GROUP BY (<列名>) WITH ROLLUP

集計行とは、数値列の値を合計した行です。ROLLUPを指定すると、合計した集計行を一番最後の行として追加して結果を返します。このとき<列名>で指定した列の集計行の値にはNULLが指定されることになります。

GROUP BY句(ROLLUP): 使用例

SQL文 ORACLE
SELECT カテゴリ, SUM(販売数量) 販売個数
FROM 売上 GROUP BY ROLLUP(カテゴリ);


実行結果

カテゴリ販売個数
びっくり商品18
奇想天外商品4
非効率商品21
非実用商品22
 65
表:売上
商品名カテゴリ単価販売数量
割れない卵非実用商品30012
温まらない水非効率商品98015
結べない紐非効率商品1506
開けない本非実用商品45010
沈む板奇想天外商品10004
硬いプリンびっくり商品12018

関連リンク

次の章へ進む
【SQL】 HAVINGの使い方(グループ化されたものに条件を設定する)
GROUP BY句でグループ化した表のデータに対して、さらに検索条件を設定できるのがHAVING句です。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるページです。
SQLリファレンスTOPページ
SQLリファレンス
データの操作、演算子、関数を解説します。
Recommended Articles