Categories: データベース

SQLiteでデータをまとめて分析!GROUP BYの使い方をわかりやすく解説

SQLiteは、軽量で使いやすいデータベースとして多くのアプリケーションや学習環境で利用されています。その中でも「GROUP BY」は、データをグループ化して集計処理を行うときに欠かせない構文です。売上の合計や平均、件数のカウントなど、現実のデータ分析にも直結する便利な使い方が可能です。本記事では、SQLiteにおけるGROUP BYの基本的な使い方から、HAVINGとの組み合わせ、実践的なSQL文の例までを丁寧に解説します。SQL初心者でも安心して読めるように、わかりやすい言葉と具体例で構成しています。


GROUP BYとは何か?基本の意味と役割

SQLiteにおけるGROUP BYは、特定の列の値をもとにデータをグループ化し、各グループごとに集計を行うための構文です。

たとえば、販売データが入ったテーブルで「商品ごとの売上合計」を知りたい場合、GROUP BYを使うことで「商品ごとに」データを分けて集計が可能になります。

基本構文は以下の通りです。

SELECT カラム名, 集計関数
FROM テーブル名
GROUP BY カラム名;

使用される主な集計関数:

  • COUNT():件数を数える
  • SUM():合計を求める
  • AVG():平均を出す
  • MAX():最大値
  • MIN():最小値

GROUP BYの基本例:商品ごとの売上を集計する

以下のような「sales」テーブルがあるとします。

idproductamount
1Apple100
2Banana200
3Apple150
4Banana100
5Orange300

このデータから商品ごとの売上合計を求めたい場合、以下のようなSQLを使います。

SELECT product, SUM(amount) AS total_sales
FROM sales
GROUP BY product;

実行結果は以下の通りになります。

producttotal_sales
Apple250
Banana300
Orange300

このようにGROUP BYを使うことで、重複したデータをグループ化して、合計値を求めることができます。


複数の列でGROUP BYを使う

GROUP BYは1つの列だけでなく、複数の列に対しても使用できます。たとえば「商品×日付」のように複合的にグループ化したいときに使います。

SELECT product, sale_date, SUM(amount) AS daily_sales
FROM sales
GROUP BY product, sale_date;

このように複数列を指定することで、より詳細な集計が可能になります。


HAVING句と組み合わせて絞り込む

GROUP BYで集計した結果に対して、さらに条件を付けたい場合はHAVING句を使用します。WHERE句とは異なり、集計後の値に条件を付けることができます。

例:売上合計が200以上の商品だけを表示

SELECT product, SUM(amount) AS total_sales
FROM sales
GROUP BY product
HAVING total_sales >= 200;

実行結果:

producttotal_sales
Apple250
Banana300
Orange300

このように、HAVING句を使うと、集計したあとのデータに対してさらに絞り込みができるため非常に便利です。


GROUP BYとORDER BYの併用

GROUP BYと一緒にORDER BYを使うことで、集計結果を見やすい順番に並べることができます。

例:売上の多い順に並べたい場合

SELECT product, SUM(amount) AS total_sales
FROM sales
GROUP BY product
ORDER BY total_sales DESC;

結果:

producttotal_sales
Banana300
Orange300
Apple250

このように、ORDER BYを使うことで、データをより見やすく、意味のある順番で表示できます。


GROUP BYで注意すべきポイント

GROUP BYを使う際にはいくつかの注意点があります。

1. SELECT句にはグループ化されていない列を直接書けない

以下のようなSQLはエラーになります。

SELECT id, product, SUM(amount)
FROM sales
GROUP BY product;

idはGROUP BYに含まれていないため、複数の行にまたがる可能性があり、どの値を表示するか曖昧になります。

正しくは以下のように集計関数を使うか、GROUP BYの対象に含める必要があります。

SELECT product, COUNT(id), SUM(amount)
FROM sales
GROUP BY product;

実践的なGROUP BYの使用例:ユーザーごとのアクティビティ集計

ユーザーテーブルとアクティビティログがあると仮定します。

-- usersテーブル
| user_id | name |
|---------|--------|
| 1 | Alice |
| 2 | Bob |

-- logsテーブル
| log_id | user_id | action |
|--------|---------|------------|
| 1 | 1 | login |
| 2 | 1 | logout |
| 3 | 2 | login |
| 4 | 1 | login |

ユーザーごとのアクション数を数えたいときは以下のようにします。

SELECT users.name, COUNT(logs.action) AS action_count
FROM users
JOIN logs ON users.user_id = logs.user_id
GROUP BY users.name;

結果:

nameaction_count
Alice3
Bob1

JOINとGROUP BYを組み合わせることで、より実用的な集計分析が可能になります。


まとめ:GROUP BYはSQLiteでの集計分析の基本!

SQLiteにおけるGROUP BYの使い方をマスターすれば、データを「まとめて見る」力が飛躍的に向上します。売上分析、ユーザー行動の把握、カテゴリ別の統計など、様々な場面で活用できます。

要点まとめ

  • GROUP BYは指定した列の値ごとに行をまとめる。
  • SUM、COUNT、AVGなどの集計関数とセットで使う。
  • HAVING句で集計後のデータを絞り込み可能。
  • ORDER BYで見やすく並び替えができる。
  • 複数列でのグループ化、JOINとの併用も実用的。

実際に手を動かしてSQLを書いてみることで、GROUP BYの理解は一段と深まります。ぜひ自分のデータで試してみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。

Recent Posts