カテゴリ: データベース 更新日: 2025/02/24

SQLのGROUP BYと集約関数を完全ガイド!初心者でもわかるデータの集計方法

GROUP BYと集約関数
GROUP BYと集約関数

新人と先輩の会話形式で理解しよう

新人

「SQLでデータを集計する方法を知りたいです!」

先輩

「それなら、GROUP BY集約関数を使うと便利だよ。」

新人

「GROUP BYと集約関数って何ですか?」

先輩

「データを集計するときに使う関数のことだよ。たとえば、データの個数を数えたり、合計を求めたり、平均を計算したりするのに使うんだ。」

1. 集約関数とは?

1. 集約関数とは?
1. 集約関数とは?

SQLの集約関数とは、複数のデータを1つの値にまとめて計算する関数です。

主な集約関数

  • COUNT: データの件数を数える
  • SUM: 数値データの合計を求める
  • AVG: 数値データの平均を求める
  • MIN: 最小値を求める
  • MAX: 最大値を求める

今回は、基本となるCOUNTSUMAVGの使い方を解説します。

2. COUNT, SUM, AVGの基本的な使い方

2. COUNT, SUM, AVGの基本的な使い方
2. COUNT, SUM, AVGの基本的な使い方

集約関数を使うことで、データの統計情報を簡単に取得できます。

1. COUNT関数(データの件数を数える)

COUNTを使うと、特定のデータが何件あるのかを調べることができます。


SELECT COUNT(*) AS employee_count FROM employee;

このSQLを実行すると、従業員の総数が取得できます。

employee_count
5

2. SUM関数(数値の合計を求める)

SUMを使うと、指定したカラムの合計値を求めることができます。


SELECT SUM(salary) AS total_salary FROM employee;

このSQLを実行すると、全社員の給与の合計が取得できます。

total_salary
25500000

3. AVG関数(数値の平均を求める)

AVGを使うと、数値データの平均値を計算できます。


SELECT AVG(salary) AS average_salary FROM employee;

このSQLを実行すると、全社員の平均給与が取得できます。

average_salary
5100000

このように、集約関数を使うと、データの統計情報を簡単に取得できます。

4. GROUP BYの基本(データをグループ化する方法)

4. GROUP BYの基本(データをグループ化する方法)
4. GROUP BYの基本(データをグループ化する方法)

SQLのGROUP BYを使うと、特定のカラムの値ごとにデータをグループ化し、集計を行うことができます。

1. GROUP BYを使った基本的な集計

例えば、部署ごとの従業員数を求める場合、GROUP BYを使用してデータをdepartmentごとに集計します。


SELECT department, COUNT(*) AS employee_count
FROM employee
GROUP BY department;

このSQLを実行すると、各部署に所属する従業員の人数が取得できます。

department employee_count
営業2
開発2
人事1

このように、GROUP BYを使うことで、同じ部署ごとにデータをグループ化し、集計が可能になります。

5. MIN, MAX関数を使って最小値・最大値を取得する

5. MIN, MAX関数を使って最小値・最大値を取得する
5. MIN, MAX関数を使って最小値・最大値を取得する

MIN関数とMAX関数を使うと、それぞれ最小値・最大値を求めることができます。

1. MIN関数を使って最小値を取得

例えば、全社員の中で最も低い給与を取得したい場合、以下のSQLを使用します。


SELECT MIN(salary) AS lowest_salary FROM employee;

このSQLを実行すると、最も低い給与が取得できます。

lowest_salary
4200000

2. MAX関数を使って最大値を取得

逆に、最も高い給与を取得したい場合は、MAX関数を使用します。


SELECT MAX(salary) AS highest_salary FROM employee;

このSQLを実行すると、最も高い給与が取得できます。

highest_salary
6000000

このように、MINMAXを使うことで、データの最小値や最大値を簡単に取得できます。

6. GROUP BYとSUM, AVGを組み合わせた集計

6. GROUP BYとSUM, AVGを組み合わせた集計
6. GROUP BYとSUM, AVGを組み合わせた集計

複数のデータをグループ化して集計する場合、GROUP BYSUMAVGを組み合わせて使用します。

1. 各部署の給与合計を求める(SUM関数)

各部署ごとの給与の合計を求めるには、SUM関数を使います。


SELECT department, SUM(salary) AS total_salary
FROM employee
GROUP BY department;

このSQLを実行すると、各部署の給与の合計が取得できます。

department total_salary
営業9800000
開発12000000
人事4800000

2. 各部署の給与平均を求める(AVG関数)

各部署ごとの給与の平均を求めるには、AVG関数を使います。


SELECT department, AVG(salary) AS average_salary
FROM employee
GROUP BY department;

このSQLを実行すると、各部署の給与の平均が取得できます。

department average_salary
営業4900000
開発6000000
人事4800000

このように、GROUP BYと集約関数を組み合わせることで、グループごとの合計や平均を取得できます。

7. HAVING句を使った条件付き集計

7. HAVING句を使った条件付き集計
7. HAVING句を使った条件付き集計

HAVING句を使うと、GROUP BYでグループ化した後の集計結果に対して条件を指定できます。

1. 各部署の平均給与が500万円以上の部署を取得

例えば、各部署の平均給与が500万円以上の部署を取得したい場合、以下のSQLを使用します。


SELECT department, AVG(salary) AS average_salary
FROM employee
GROUP BY department
HAVING AVG(salary) >= 5000000;

このSQLを実行すると、平均給与が500万円以上の部署のみが取得されます。

department average_salary
開発6000000
営業4900000

2. HAVING句とWHERE句の違い

HAVING句は、GROUP BYの結果に条件を適用します。一方、WHERE句は、GROUP BYの前に適用されます。


-- WHEREを使用(個々のデータに適用)
SELECT department, AVG(salary) AS average_salary
FROM employee
WHERE salary >= 5000000
GROUP BY department;

この場合は、500万円以上の給与データのみを集計対象にし、その後で部署ごとの平均給与を求めます。

8. GROUP BYとORDER BYの組み合わせ方

8. GROUP BYとORDER BYの組み合わせ方
8. GROUP BYとORDER BYの組み合わせ方

GROUP BYで集計した結果を並び替えたい場合、ORDER BYを組み合わせます。

1. 部署ごとの平均給与を高い順に並び替える

例えば、各部署の平均給与を高い順に表示するには、以下のように記述します。


SELECT department, AVG(salary) AS average_salary
FROM employee
GROUP BY department
ORDER BY average_salary DESC;

このSQLを実行すると、平均給与が高い順に部署が表示されます。

department average_salary
開発6000000
営業4900000
人事4800000

2. 従業員数が多い順に部署を並べる


SELECT department, COUNT(*) AS employee_count
FROM employee
GROUP BY department
ORDER BY employee_count DESC;

このSQLを実行すると、従業員の多い部署順に表示されます。

9. 実践!GROUP BYを使ったデータ分析

9. 実践!GROUP BYを使ったデータ分析
9. 実践!GROUP BYを使ったデータ分析

GROUP BYを使うことで、ビジネスデータの分析が可能になります。

1. 各部署の最大給与と最小給与を取得


SELECT department, MAX(salary) AS max_salary, MIN(salary) AS min_salary
FROM employee
GROUP BY department;

このSQLを実行すると、各部署の最高給与と最低給与が取得できます。

department max_salary min_salary
開発60000005000000
営業50000004800000
人事48000004800000

2. 1ヶ月の売上合計を求める

売上管理テーブルsalesがあるとします。


SELECT DATE_FORMAT(sale_date, '%Y-%m') AS month, SUM(amount) AS total_sales
FROM sales
GROUP BY month
ORDER BY month DESC;

このSQLを実行すると、月ごとの売上合計が取得できます。

month total_sales
2024-0615000000
2024-0512000000

このように、GROUP BYを活用すると、さまざまなデータ分析が可能になります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Javaのメソッドを呼び出す書き方を完全解説!mainメソッドから実行する基本
Java のメソッドとは?基本の書き方を学ぼう
Javaの多次元配列(2次元配列)とは?初心者向けにわかりやすく解説
Javaの配列をコピーする「Arrays.copyOf()」の基本を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
SQLのINSERT文を完全ガイド!初心者でもわかるデータの追加方法
No.2
Java&Spring記事人気No2
Spring Bootで学ぶ!セッションの有効期限(タイムアウト)設定の基礎
No.3
Java&Spring記事人気No3
コントローラー・サービス・リポジトリの役割と配置場所をわかりやすく解説!初心者向けSpringアーキテクチャ入門
No.4
Java&Spring記事人気No4
Java のファイル構成を理解しよう(.javaと.class)|初心者向けにわかりやすく解説