MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで条件付きGROUP BYを使って重複データを集約・取得する方法

はじめに

MySQLでは、GROUP BY句と集計関数(MAX()など)を組み合わせることで、条件付きのグループ化を行い、各グループから必要な値を効率的に取得できます。本記事では、学生名が重複しているデータから、各学生の最高得点を取り出す例を通して、その具体的な手順を解説します。

1. サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable
(
    StudentName varchar(40),
    StudentMarks int
);
Query OK, 0 rows affected (0.64 sec)

2. テストデータの挿入

次に、INSERTコマンドを使ってレコードを挿入します。

mysql> insert into DemoTable values('John',78);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',48);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('John',67);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Chris',89);
Query OK, 1 row affected (0.15 sec)

3. 登録済みレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。ご覧のように、「John」には78点と67点、「Chris」には48点と89点といったように、同じ学生名のレコードが複数存在しています。

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| John        |           78 |
| Chris       |           48 |
| John        |           67 |
| Chris       |           89 |
+-------------+--------------+
4 rows in set (0.00 sec)

4. 条件付きGROUP BYで重複を排除して取得する

ここで本題です。GROUP BY句とMAX()関数を組み合わせることで、学生名の重複を排除し、各学生の最高得点だけを表示できます。

mysql> select StudentName,Max(StudentMarks) AS StudentMarks 
    -> from DemoTable group by StudentName;

このクエリを実行すると、以下のような結果が得られます。「John」は最大得点78点として1行にまとめられています。

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| John        |           78 |
| Chris       |           89 |
+-------------+--------------+
2 rows in set (0.00 sec)

ポイント解説

  • GROUP BY句: 指定したカラム(ここではStudentName)の同じ値を持つ行を1つのグループにまとめます。
  • MAX()関数: 各グループ内の指定カラム(StudentMarks)の最大値を返します。最小値を取得したい場合はMIN()、合計ならSUM()、平均ならAVG()なども同様に使えます。
  • ASキーワード: 集計結果に別名(エイリアス)を付けることで、出力を見やすくできます。

このように、GROUP BYと集計関数を組み合わせれば、重複データの中から条件に合う値を簡単に抽出できます。データ分析やレポート作成の際に非常に役立つテクニックなので、ぜひ活用してください。

  1. MySQLのGROUP BY句で各グループから1行だけを選択・抽出する方法

    MySQLでは、GROUP BY句とサブクエリを組み合わせることで、各グループから特定の1行(たとえば最小のIDを持つ行)を取り出すことができます。本記事では、学生の点数データを例に、テーブル作成から実際のクエリ実行までの手順をわかりやすく解説します。 1. テーブルの作成 まず、以下のCREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable1572     -> (     -> StudentId int,  &nb

  2. Androidでグループメッセージを送る方法|MMSの基本とおすすめアプリ5選

    グループメッセージ(グループテキスト)とは、インターネットではなく携帯電話回線を利用して、複数人と同時にやり取りできる機能です。現在ではWhatsAppやFacebook Messengerなどインターネットベースのグループチャットアプリが主流ですが、常にネット接続を確保・維持する必要がないことから、今なおグループメッセージを好むユーザーは少なくありません。仕事でも家庭でも、私たちは毎日のように複数人との連絡が必要になります。そんなときに役立つのが、Android向けのグループメッセージアプリです。 この記事では、Androidでグループメッセージを送信する方法と、グループメッセージがうまく送