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

MySQLで一意な値を取得してカウントする方法|GROUP BY句の使い方を解説

MySQLで一意な値を取得してカウントする方法

MySQLでテーブル内の一意な(重複を除いた)値を取得し、それぞれの出現回数をカウントしたい場合は、GROUP BY句を使用します。GROUP BY句は、指定したカラムの値が同じ行を1つのグループにまとめるため、COUNT(*)関数と組み合わせることで、値ごとの件数を簡単に集計できます。

基本構文

構文は以下のとおりです。

select yourColumnName, count(*) as anyAliasName from yourTableName group by yourColumnName;

サンプルテーブルの作成

実際に動作を確認するため、まずテーブルを作成します。テーブル作成のクエリは以下のとおりです。

mysql> create table GroupByAndCountDemo
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(100)
-> );
Query OK, 0 rows affected (0.64 sec)

レコードの挿入

続いて、INSERT文でテーブルにテストデータを挿入します。ここでは、複数行を一度に登録できる複数行INSERT構文を使用しています。

mysql> insert into GroupByAndCountDemo(ClientName) values
-> ('John'),('Carol'),('Sam'),('Sam'),
-> ('John'),('John'),('John'),('Sam'),
-> ('Sam'),('Sam'),('John'),('John'),
-> ('John'),('David'),('Maxwell'),('Maxwell');
Query OK, 16 rows affected (0.15 sec)

テーブルの内容を確認する

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

mysql> select *from GroupByAndCountDemo;

出力結果は以下のとおりです。

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
| 4 | Sam |
| 5 | John |
| 6 | John |
| 7 | John |
| 8 | Sam |
| 9 | Sam |
| 10 | Sam |
| 11 | John |
| 12 | John |
| 13 | John |
| 14 | David |
| 15 | Maxwell |
| 16 | Maxwell |
+----------+------------+
16 rows in set (0.00 sec)

同じ名前(John、Sam、Maxwellなど)が複数回登録されていることがわかります。

GROUP BY句で一意な値と件数を取得する

それでは、GROUP BY句とCOUNT(*)関数を使って、一意な値ごとの出現回数を取得してみましょう。

mysql> select ClientName,count(*) as TotalCount from GroupByAndCountDemo group by ClientName;

出力結果は以下のとおりです。

+------------+------------+
| ClientName | TotalCount |
+------------+------------+
| John | 7 |
| Carol | 1 |
| Sam | 5 |
| David | 1 |
| Maxwell | 2 |
+------------+------------+
5 rows in set (0.00 sec)

このように、Johnが7件、Carolが1件、Samが5件、Davidが1件、Maxwellが2件と、各クライアント名ごとのレコード数を一目で確認できます。GROUP BY句で指定したカラムの一意な値ごとに行がグループ化され、COUNT(*)がそのグループ内の行数を返す仕組みです。

補足:件数順に並べ替えて表示する

出現回数の多い順に結果を表示したい場合は、ORDER BY句を組み合わせると便利です。

mysql> select ClientName,count(*) as TotalCount
-> from GroupByAndCountDemo
-> group by ClientName
-> order by TotalCount desc;

これにより、件数の多い値から順に結果を確認できるため、データの傾向分析やレポート作成にも役立ちます。

  1. MySQLで個別の値の出現回数をカウントし、結果を新しい列として表示する方法

    MySQLでは、GROUP BY句とCOUNT()関数を組み合わせることで、各値が何回出現したかを簡単に集計できます。この記事では、実際にテーブルを作成し、重複する値の出現回数をカウントして結果を表示する手順を解説します。 1. サンプルテーブルの作成 まず、集計対象となるテーブルを作成しましょう。 mysql> create table DemoTable ( Value int ); Query OK, 0 rows affected (0.57 sec) 2. テストデータの挿入 INSERTコマンドを使って、いくつかのレコードを挿入します。意図的に同じ値を複数回登録し

  2. 【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法

    特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af