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

MySQLで条件を指定してレコード数をカウントする方法

MySQLで条件付きカウントを実現するには

MySQLで単純に件数を数える場合は COUNT() 関数を使用しますが、特定の条件に合致する行だけを数えたい場合は、集計関数 SUM() を活用すると便利です。SUM() の引数に条件式を渡すことで、条件を満たす行のみを効率的にカウントできます。

ここでは、サンプルテーブルを作成し、実際に条件付きカウントを行う手順を解説します。

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

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable1515
    -> (
    -> ClientId varchar(10),
    -> ClientName varchar(20)
    -> );
Query OK, 0 rows affected (0.53 sec)

2. テストデータの挿入

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1515 values('CLI-110','David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1515 values('CLI-101','Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Mike');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-130','Mike');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)

3. 挿入したレコードの確認

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

mysql> select * from DemoTable1515;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| CLI-101  |    Chris   |
| CLI-110  |    David   |
| CLI-101  |      Bob   |
| CLI-101  |      Sam   |
| CLI-101  |      Sam   |
| CLI-101  |     Mike   |
| CLI-130  |     Mike   |
| CLI-101  |     Chris  |
| CLI-101  |      Sam   |
+----------+------------+
9 rows in set (0.00 sec)

4. 条件を指定してカウントするクエリ

それでは、本題である「条件付きカウント」のクエリを見てみましょう。WHERE句でClientIdが「CLI-101」の行に絞り込み、そのうえで SUM(ClientName='Sam') を使って名前が「Sam」である行の数をカウントしています。

mysql> select ClientId,sum(ClientName='Sam') as NameOn101Id,count(*) as TotalNameOn101 from DemoTable1515
    -> where ClientId='CLI-101';

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

+----------+-------------+----------------+
| ClientId | NameOn101Id | TotalNameOn101 |
+----------+-------------+----------------+
| CLI-101  |          3 |              7 |
+----------+-------------+----------------+
1 row in set (0.00 sec)

ポイント解説

このクエリのポイントは、MySQLではブール式が真の場合に「1」、偽の場合に「0」と評価されるという仕組みを利用している点です。SUM(ClientName='Sam') は、「ClientNameが'Sam'である行」を1として合計するため、結果的に該当行数をカウントすることになります。

上記の例では、ClientIdが「CLI-101」のレコードは全部で7件あり、そのうち名前が「Sam」のレコードは3件であることが一目でわかります。この手法は、GROUP BY句と組み合わせれば、クライアントIDごとの集計など、より複雑な条件付き集計にも応用できます。

  1. MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法

    MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&

  2. ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本

    ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに