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ごとの集計など、より複雑な条件付き集計にも応用できます。
-
MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法
MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&
-
ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本
ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに