MySQLで3つ以上の列の値がTRUEである行を抽出・カウントするクエリの書き方
MySQLでは、複数のブール型(boolean)カラムのうち、3つ以上がTRUE(1)である行を抽出したい場合、WHERE句と算術演算を組み合わせることで簡単に実現できます。MySQLではTRUEは1、FALSEは0として扱われるため、各カラムの値を足し合わせて条件判定できるのがポイントです。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。ここでは4つのboolean型カラムを持つテーブルを定義します。
mysql> create table DemoTable
-> (
-> isMarried boolean,
-> isActive boolean,
-> isMember boolean,
-> isOn boolean
-> );
Query OK, 0 rows affected (0.61 sec)テストデータの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。
mysql> insert into DemoTable values(true,false,true,false); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(false,false,false,false); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(true,true,true,true); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(true,false,false,true); Query OK, 1 row affected (0.55 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
+-----------+----------+-----------+------+ | isMarried | isActive | isMember | isOn | +-----------+----------+-----------+------+ | 1 | 0 | 1 | 0 | | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | | 1 | 0 | 0 | 1 | +-----------+----------+-----------+------+ 4 rows in set (0.00 sec)
3つ以上の値がTRUEである行を抽出するクエリ
本題のクエリです。各booleanカラムは内部的に1または0の数値として格納されているため、単純に加算し、その合計が3以上かどうかをWHERE句で判定します。
mysql> select *from DemoTable where isMarried+isActive+isMember+isOn >=3;
出力結果
+-----------+----------+-----------+------+ | isMarried | isActive | isMember | isOn | +-----------+----------+-----------+------+ | 1 | 1 | 1 | 1 | +-----------+----------+-----------+------+ 1 row in set (0.00 sec)
上記の出力から、4つのカラムすべてがTRUE(1)である1行だけが抽出されたことがわかります。
抽出件数だけを取得したい場合
該当する行の「件数」そのものを知りたい場合は、COUNT関数を使います。
mysql> select count(*) from DemoTable
where isMarried+isActive+isMember+isOn >=3;このように、MySQLのboolean型は実体がTINYINT(1)であることを利用すれば、SUMや加算と組み合わせて柔軟な条件抽出が可能です。条件の閾値(この例では3)を変更すれば、「2つ以上」「すべて」などのパターンにも簡単に対応できます。
-
MySQLで重複している値(複数回出現するデータ)を抽出する方法
テーブル内に2回以上出現する値(重複データ)を抽出したい場合、「GROUP BY」句と「HAVING」句を「COUNT(*)」関数と組み合わせて使用します。WHERE句は集計前の行に対して条件を適用するため、集計後の結果を絞り込むにはHAVING句が必要になる点がポイントです。 1. サンプルテーブルを作成する まず、検証用のテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Value int &nbs
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa