MySQLでテーブルの列から0と1の件数をカウントし、2つの列に分けて表示する方法
はじめに
テーブルの1つの列に格納された「0」と「1」の個数をそれぞれカウントし、結果を複数の列に分けて表示したい場合、MySQLの集計関数SUM()を利用すると簡単に実現できます。「条件式が真なら1、偽なら0を返す」という性質を活用するのがポイントです。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
(
isMarried tinyint(1)
);
Query OK, 0 rows affected (0.84 sec)
2. テストデータを挿入する
INSERT文を使って、いくつかのレコードを登録します。
mysql> insert into DemoTable values(0); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(0); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(0); Query OK, 1 row affected (0.12 sec)
3. 登録したデータを確認する
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は次のとおりです。
+-----------+ | isMarried | +-----------+ | 0 | | 1 | | 1 | | 0 | | 1 | | 1 | | 0 | +-----------+ 7 rows in set (0.00 sec)
4. 0と1の件数をカウントするクエリ
以下のクエリを実行すると、「1」の件数、「0」の件数、さらに両方の合計件数を一度に取得し、3つの列として表示できます。
mysql> select sum(tbl.isMarried=1) as all_one_count, sum(tbl.isMarried=0) as all_zero_count, sum(tbl.isMarried in(0,1)) as all_zero_count_and_one_count from DemoTable tbl;
実行結果:
+---------------+----------------+------------------------------+ | all_one_count | all_zero_count | all_zero_count_and_one_count | +---------------+----------------+------------------------------+ | 4 | 3 | 7 | +---------------+----------------+------------------------------+ 1 row in set (0.04 sec)
クエリの仕組み
sum(tbl.isMarried=1) のように、SUM() の中へ直接比較条件を記述するのがこのテクニックの核心です。MySQLでは、条件式が成立すれば1、成立しなければ0が返されるため、その合計を取ることで該当行数をカウントできます。
また、IN (0,1) を使えば「0または1のどちらかに該当する行」の総数も同じ要領で求められます。GROUP BYを使わずに条件別の集計結果を横並びの列として取得できるため、ダッシュボードやレポート出力などでも活用できる便利な手法です。
-
JavaでMySQLテーブルのカラム数を取得・カウントする方法
MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable -> ( -> St
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa