GROUP BY句 : 解説
GROUP BY句は、GROUP BYキーワードの後ろに指定した列の値により表内のデータをいくつかのグループに分けます。グループは、指定した列の値が同じものを1つのグループとします。そして分割されたグループそれぞれに対して集計を行うことができます。
GROUP BY句 : 使用例
次の例では、GROUP BY句を使って、表の「カテゴリ」月のカテゴリに従ってグループ分けし、それぞれのグループに商品がいくつあるか、グループ全部の商品がいくつ販売されたかを求めています。
SQL文
SELECT カテゴリ, COUNT(*) 商品点数, SUM(販売数量) 販売個数
FROM 売上 GROUP BY カテゴリ ;
実行結果
カテゴリ | 商品点数 | 販売個数 |
---|---|---|
びっくり商品 | 1 | 18 |
奇想天外商品 | 1 | 4 |
非効率商品 | 2 | 21 |
非実用商品 | 2 | 22 |
表:売上
商品名 | カテゴリ | 単価 | 販売数量 |
---|---|---|---|
割れない卵 | 非実用商品 | 300 | 12 |
温まらない水 | 非効率商品 | 980 | 15 |
結べない紐 | 非効率商品 | 150 | 6 |
開けない本 | 非実用商品 | 450 | 10 |
沈む板 | 奇想天外商品 | 1000 | 4 |
硬いプリン | びっくり商品 | 120 | 18 |
GROUP BY句の記述で気を付けなくてはならないのは、SELECTキーワードの後ろの選択列リストで、GROUP BYに指定した列名以外を記述するときには、集計関数を用いなくてはならないということです。これは、GROUP BY句を記述すると、データがグループ化されるため、グループ化されていないデータと混在できなくなるためです。そのため、グループ化されていないデータは何らかの形でグループ化、または集計したものにする必要があります。GROUP BY句 : 書式(ROLLUP)また、GROUP BY句ではオプションにROLLUPを指定して、集計行をつけることもできます。
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 |
表:売上
商品名 | カテゴリ | 単価 | 販売数量 |
---|---|---|---|
割れない卵 | 非実用商品 | 300 | 12 |
温まらない水 | 非効率商品 | 980 | 15 |
結べない紐 | 非効率商品 | 150 | 6 |
開けない本 | 非実用商品 | 450 | 10 |
沈む板 | 奇想天外商品 | 1000 | 4 |
硬いプリン | びっくり商品 | 120 | 18 |