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

MySQLの単一クエリでGROUP BYとCOUNTを使い、重複レコードをグループ化して最大値を表示する方法

MySQLでは、GROUP BY句とCOUNT()関数を組み合わせることで、重複する値を持つレコードを効率的にグループ化できます。さらにMAX()関数を併用すれば、各グループ内の最大値も同時に取得可能です。本記事では、具体的な手順を実行例とともに解説します。

テーブルの作成

まず、サンプルとなるテーブルを作成しましょう。

mysql> create table DemoTable
    -> (
    -> ClientId int,
    -> Value int
    -> );
Query OK, 0 rows affected (0.79 sec)

レコードの挿入

続いて、INSERTコマンドを使ってテーブルにデータを追加します。

mysql> insert into DemoTable values(10,678);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(20,678);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(30,678);
Query OK, 1 row affected (0.09 sec)

登録データの確認

SELECT文でテーブル内の全レコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+----------+-------+
| ClientId | Value |
+----------+-------+
|       10 |   678 |
|       20 |   678 |
|       30 |   678 |
+----------+-------+
3 rows in set (0.00 sec)

このように、Value列には同じ値「678」が3件重複している状態です。

GROUP BYとCOUNT・MAXを組み合わせたクエリ

それでは、COUNT()でレコード数を数えながら、MAX()でClientIdの最大値を取得するクエリを見てみましょう。GROUP BY句にValue列を指定することで、重複する値ごとにレコードがまとめられます。

mysql> select count(tbl.ClientId),max(tbl.ClientId) from DemoTable tbl
    -> group by Value;

実行結果は以下の通りです。

+---------------------+-------------------+
| count(tbl.ClientId) | max(tbl.ClientId) |
+---------------------+-------------------+
|                   3 |                30 |
+---------------------+-------------------+
1 row in set (0.00 sec)

結果の解説

この出力から、以下のことが読み取れます。

  • count(tbl.ClientId) = 3:Value「678」を持つレコードが3件存在することを示しています。
  • max(tbl.ClientId) = 30:該当グループ内で最も大きいClientIdは「30」であることを示しています。

このように、単一のクエリだけでGROUP BYによるグループ化、COUNTによる件数集計、そしてMAXによる最大値の取得を同時に実現できます。重複データの分析や集計処理において非常に有用なテクニックなので、ぜひ実務でも活用してみてください。

  1. MySQLで結果を日付ごとにグループ化し、重複値の件数を表示するクエリの書き方

    はじめにMySQLでは、GROUP BY句とDATE()関数、COUNT()関数を組み合わせることで、日付単位でレコードをグループ化し、重複する値の件数を簡単に集計できます。ここでは、到着日時ごとに乗客コードを集計する例を通して、その具体的な方法を解説します。1. サンプルテーブルの作成まず、以下のSQLを実行してテーブルを作成します。mysql> create table DemoTable1496-> (-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> PassengerCode varchar(20),-> A

  2. MySQLで重複するタプルを検出してカウントを表示する方法

    MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入