MySQLで複数の列の値をカウントする方法(CASE文の活用)
MySQLでは、CASE文とSUM関数を組み合わせることで、複数の列にまたがる特定の値の出現回数を一度にカウントできます。この記事では、実際のサンプルコードを使いながら、その手順をわかりやすく解説します。
1. サンプルテーブルを作成する
まず、3つの整数型の列を持つテーブルを作成します。
mysql> create table countValueMultipleColumnsDemo
-> (
-> Value1 int,
-> Value2 int,
-> Value3 int
-> );
Query OK, 0 rows affected (0.62 sec)
2. テストデータを挿入する
次に、INSERT文を使ってレコードを追加します。
mysql> insert into countValueMultipleColumnsDemo values(10,15,10); Query OK, 1 row affected (0.15 sec) mysql> insert into countValueMultipleColumnsDemo values(20,30,10); Query OK, 1 row affected (0.14 sec) mysql> insert into countValueMultipleColumnsDemo values(40,10,60); Query OK, 1 row affected (0.18 sec)
3. データを確認する
SELECT文でテーブルの中身を確認してみましょう。
mysql> select *from countValueMultipleColumnsDemo;
実行結果は以下の通りです。
+--------+--------+--------+ | Value1 | Value2 | Value3 | +--------+--------+--------+ | 10 | 15 | 10 | | 20 | 30 | 10 | | 40 | 10 | 60 | +--------+--------+--------+ 3 rows in set (0.00 sec)
4. 複数の列にまたがって値「10」をカウントする
ここが本題です。各列ごとにCASE文で条件判定を行い、その合計をSUM関数で集計することで、3つの列全体における値「10」の出現回数を求められます。
mysql> SELECT (SUM(CASE WHEN Value1 = 10 THEN 1 ELSE 0 END) + -> SUM(CASE WHEN Value2 = 10 THEN 1 ELSE 0 END) + -> SUM(CASE WHEN Value3 = 10 THEN 1 ELSE 0 END)) TOTAL_COUNT -> from countValueMultipleColumnsDemo;
実行結果は以下の通りです。
+-------------+ | TOTAL_COUNT | +-------------+ | 4 | +-------------+ 1 row in set (0.00 sec)
クエリの仕組みを解説
このクエリのポイントは以下の通りです。
- CASE WHEN 列名 = 10 THEN 1 ELSE 0 END:該当する列の値が「10」なら1、そうでなければ0を返します。
- SUM(...):各行の判定結果(1または0)を列ごとに合計します。
- + 演算子:Value1・Value2・Value3それぞれの合計を足し合わせることで、全列を通じた出現回数を算出します。
今回のサンプルデータでは、「10」はValue1に1回、Value2に1回、Value3に2回出現しているため、合計4という結果になります。
まとめ
CASE文とSUM関数を組み合わせれば、複数の列にまたがる特定の値のカウントを1つのクエリで実現できます。この手法は、アンケートデータやフラグ管理など、横持ち形式のテーブルから特定条件の件数を集計したい場合に特に便利です。ぜひ活用してみてください。
-
MySQLでカスタム列に複数の値を設定する方法|UNION ALLの使い方を実例で解説
はじめにMySQLでカスタム列(計算結果を出力する列)に複数の値を持たせたい場合、UNION ALLを利用すると簡単に実現できます。本記事では、実際にテーブルを作成し、UNION ALLを使って1つの列から複数の計算結果を取得する手順を、サンプルコードと実行結果あわせて詳しく解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1987 ( UserValue int ); Query OK, 0 rows affected (2.90 sec)レコードの挿入INSERT文を使って、
-
MySQLで特定の値を持つ列の数をカウントする方法【SUM関数の活用】
はじめにMySQLでは、SUM関数と加算演算子(+)・論理演算子(AND)を組み合わせることで、テーブル内の複数の列に含まれる特定の値(たとえば「1」)の合計個数や、すべての列がその値を持つ行数を簡単に集計できます。本記事では、サンプルテーブルを作成しながら、具体的なSQLクエリの書き方と実行結果をわかりやすく解説します。基本構文特定の値を持つ列の数をカウントする場合、以下のような構文を使用します。selectsum(yourColumnName1 + yourColumnName2 + yourColumnName3 ... N) as `anyAliasName1`,sum(yourCol