こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- SQL SELECT文と組み合わせた「グループ別集計」する方法を知りたい
- GROUP BY句の基本構文を理解したい
データベースにおけるグループ別集計|GROUP BYとは
SQLには、SELECT文での検索結果をいくつかのまとまりに分類するグループ化という機能が備わっています。
グループ化はカテゴリ別データ集計において非常に有効な機能です。
例えば、上記に示すような商品別の売上集計表を出力したい場合、買物履歴テーブルの各行を「商品」列の内容でグループ化し、分類した商品毎に売上金額の合計値を算出します。
GROUP BY|SQL基本構文
グループ別集計のSQL基本構文は次のように示されます。
SELECT [グループ化する列名], [集計関数]
FROM [テーブル名]
WHERE [集計前絞込条件]
BROUP BY [グループ化する列名]
HAVING [集計後絞込条件]
上記のSQL構文を記述した際、グループ化集計による計算の流れは次のようになります。
- WHERE句の
[集計前絞込条件]
によって行を絞り込み - 指定した
[グループ化する列名]
毎に検索結果を分類 - 分類したグループ毎に
[集計関数]
を用いて集計 - SELECT句指定の列名と
[グループ化する列名]
のマトリックスとして結果を出力 [集計後絞込条件]
を指定した場合、集計結果に対してさらに行絞込を実行し結果出力
【参考】GROUP BYと合わせて用いる集計関数一覧
グループ化による集計の際、頻繁に用いる代表的な集計関数と、併用して用いることがある関数を示します。
代表的な集計関数
集計関数 | 概要 | 集計可能なデータ型 |
---|---|---|
SUM | 合計値を出力 | 数値 |
AVG | 平均値を出力 | 数値 |
MAX | 最大値を出力 | 数値、日付 |
MIN | 最小値を出力 | 数値、日付 |
COUNT | 該当レコード数(行数)を出力 | 全データ型 |
グループ化集計時に併用して用いることがある関数
集計関数 | 概要 |
---|---|
ROUND | 数値の四捨五入結果を出力 |
TRUNC | 数値の小数点切り捨て結果を出力 |
POWER | 数値のべき乗(2乗、3乗など)を出力 |
LENGTH | 文字列の長さを表す数値を出力 |
REPLACE | 置換した文字列を出力 |
SUBSTRING | 一部分だけ取り出した文字列を出力 |
CONCAT | 連結した文字列を出力 |
GROUP BY演算子を用いたSQL操作事例
GROUP BYを用いたグループ別集計方法の具体例をいくつか紹介します。具体的な活用イメージを掴んでいきましょう!
GROUP BY |SQL基本構文
SELECT 商品, SUM(売上) AS 売上合計
FROM 買い物履歴
GROUP BY 商品
最も基本的な記述です。買物履歴テーブルの「商品」列をグループ化し、商品毎の合計売上金額を算出した例を上記に示します。
GROUP BY|WHERE(事前絞込)
SELECT 商品, SUM(売上) AS 売上合計
FROM 買い物履歴
WHERE 売上>1000
GROUP BY 商品
買物履歴テーブルの「商品」列をグループ化する前に、商品個々の売上金額を事前にフィルタリングし、商品毎の合計売上金額を算出した例を上記に示します。ここでのポイントはWHERE句を用いる点であり、WHERE句が適用されているタイミングに着目しましょう。
GROUP BY|HAVING(集計結果絞込)
SELECT 商品, SUM(売上) AS 売上合計
FROM 買い物履歴
GROUP BY 商品
HAVING SUM(売上) > 1000
買物履歴テーブルの「商品」列をグループ化し、商品毎の合計売上金額を算出した後、集計結果を合計売上金額で絞り込んだ例を示します。集計後に行を絞込みたい場合、HAVING句を用いるのがポイントです。
データベース・SQL操作まとめ
当サイトではデータベースの設計ノウハウやSQL操作における基本構文の解説記事を多数配信しています。合わせてご覧ください。
データベース・SQL操作に関する記事一覧
データベースの設計手法やSQL操作における基本構文の解説記事を配信中です。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら