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

MySQLの単一クエリ内で値の合計出現回数を取得する方法

テーブル内の特定の値が何回出現するか(合計出現回数)を、たった1つのクエリで取得したい場合は、サブクエリを利用するのが便利です。この記事では、実際にテーブルを作成しデータを挿入したうえで、各値の出現回数を取得する手順をわかりやすく解説します。

サンプルテーブルの作成

まず、サンプル用のテーブルを作成しましょう。

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

レコードの挿入

insertコマンドを使用して、テーブルに複数のレコードを挿入します。意図的に同じ値を重複させて挿入している点に注目してください。

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.36 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.20 sec)

レコードの確認

selectステートメントを実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

上記のクエリを実行すると、次のような出力が得られます。

+-------+
| Value |
+-------+
| 20 |
| 30 |
| 20 |
| 40 |
| 30 |
| 20 |
+-------+
6 rows in set (0.00 sec)

値の出現回数を取得するクエリ

以下が、各値の合計出現回数を取得するためのクエリです。外側のクエリが返す各行に対して、相関サブクエリが「同じValueを持つ行数」をカウントし、その結果をOccurrence列として表示しています。

mysql> select tbl.Value,(SELECT COUNT(*) from DemoTable where Value = tbl.Value) AS Occurrence from DemoTable tbl;

出力結果

実行すると、元のテーブルの各行に対応する出現回数が次のように表示されます。

+-------+------------+
| Value | Occurrence |
+-------+------------+
| 20 | 3 |
| 30 | 2 |
| 20 | 3 |
| 40 | 1 |
| 30 | 2 |
| 20 | 3 |
+-------+------------+
6 rows in set (0.00 sec)

この結果から、値「20」は3回、「30」は2回、「40」は1回出現していることがひと目でわかります。

補足:GROUP BYを使った代替方法

各行に出現回数を付ける必要はなく、値ごとの集計だけが必要なケースでは、GROUP BYを使うほうがシンプルで効率的です。

mysql> select Value, COUNT(*) AS Occurrence from DemoTable group by Value;

目的に応じて使い分けることで、より可読性とパフォーマンスの高いクエリを書くことができます。サブクエリを活用すれば、元のテーブルの各行に対応する出現回数を1つのクエリだけで簡単に取得できるので、ぜひ覚えておきましょう。

  1. MySQLクエリで4番目に高い値を取得する方法(LIMIT OFFSET活用)

    MySQLで4番目に高い値を取得するには?テーブルから4番目に高い値を取得するには、ORDER BY句で降順に並べ替え、LIMITとOFFSETを組み合わせるのが最もシンプルな方法です。まずは、動作を確認するためのサンプルテーブルを作成しましょう。mysql> create table DemoTable (     Amount int ); Query OK, 0 rows affected (0.88 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable va

  2. MySQLで時間差を取得するクエリの書き方を解説

    MySQLで現在時刻との時間差を取得する方法MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。1. サンプルテーブルの作成まず、日時を格納するカラムを持つテーブルを作成します。mysql> create table DemoTable1570    -> (    -> ArrivalTime datetime