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

MySQLでカンマ区切りの値が含まれる行数をカウントする方法【FIND_IN_SET活用】

MySQLでカンマ区切りの値(CSV形式)が含まれる行をカウントするには、集計関数 COUNT(*)FIND_IN_SET() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成しながら具体的な手順を解説します。

1. テーブルを作成する

まず、カンマ区切りの値を格納するテーブルを作成します。

mysql> create table DemoTable
(
    Value varchar(100)
);
Query OK, 0 rows affected (0.49 sec)

2. レコードを挿入する

INSERTコマンドを使用して、複数のレコードをテーブルに挿入します。

mysql> insert into DemoTable values('10,20,60,80');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('60,70,90');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('50,55,65,60');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('90,98,97');
Query OK, 1 row affected (0.12 sec)

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

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

mysql> select *from DemoTable;

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

+-------------+
| Value       |
+-------------+
| 10,20,60,80 |
| 60,70,90    |
| 50,55,65,60 |
| 90,98,97    |
+-------------+
4 rows in set (0.00 sec)

4. 特定のカンマ区切り値を含む行をカウントする

カンマ区切りの値の中に「60」が含まれている行数をカウントするクエリは次の通りです。FIND_IN_SET() は第2引数の文字列リスト内に第1引数の値が存在する場合にその位置(1以上の数値)を返すため、> 0 という条件で該当行のみを抽出できます。

mysql> select count(*) from DemoTable
    where find_in_set('60',Value) > 0;

実行結果:

+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

この結果から、値「60」がカンマ区切りのリスト内に含まれる行は3行であることが確認できます。

注意点:パフォーマンスについて

FIND_IN_SET() を使用した検索では通常のインデックスが利用できないため、レコード数が多いテーブルではクエリが遅くなる可能性があります。本番環境で大規模なデータを扱う場合は、カンマ区切りの値を1つのカラムにまとめるのではなく、正規化して別テーブルに分割し、JOINで結合する設計を検討することをおすすめします。

  1. MySQLでカンマ区切りの値の中から特定の文字列を検索する方法(REGEXP活用)

    カンマ区切りで保存された値の中から特定の文字列を検索したい場合、MySQLではREGEXP(正規表現)を使うのが効果的です。この記事では、実際にテーブルを作成し、カンマ区切りの値の中から「MySQL」という文字列を正確に抽出する手順を解説します。1. サンプルテーブルの作成まず、検索対象となるテーブルを作成します。mysql> create table DemoTable1902 ( Subjects text ); Query OK, 0 rows affected (0.00 sec)2. テストデータの挿入INSERT文を使って、カンマ区切りの値を持つレコー

  2. MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法

    MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `