MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。
1. テーブルを作成する
まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。
mysql> create table DemoTable1829
(
Name varchar(20),
isTopper ENUM('YES','NO')
);
Query OK, 0 rows affected (0.00 sec)
2. レコードを挿入する
次に、INSERTコマンドを使ってテーブルにデータを追加します。
mysql> insert into DemoTable1829 values('Chris','yes');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1829 values('David','yes');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1829 values('Mike','no');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1829 values('David','yes');
Query OK, 1 row affected (0.00 sec)
3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1829;
実行すると、次のような結果が得られます。
+-------+----------+ | Name | isTopper | +-------+----------+ | Chris | YES | | David | YES | | Mike | NO | | David | YES | +-------+----------+ 4 rows in set (0.00 sec)
4. 「NO」の件数のみをカウントするクエリ
それでは、名前ごとに「NO」の件数のみを返すクエリを見てみましょう。
mysql> select Name,sum(isTopper='no') from DemoTable1829 group by Name;
実行結果は以下の通りです。
+-------+--------------------+ | Name | sum(isTopper='no') | +-------+--------------------+ | Chris | 0 | | David | 0 | | Mike | 1 | +-------+--------------------+ 3 rows in set (0.00 sec)
仕組みの解説
このクエリのポイントは、sum(isTopper='no')という条件式です。MySQLでは、条件式が成立すると1、成立しなければ0を返します。そのため、SUM()関数でこれらの値を合計すると、条件に一致した行数、つまり「NO」の件数をカウントできるのです。
GROUP BY Nameによって名前ごとにグループ化しているため、「Chris」と「David」は「YES」しか持たないため0、「Mike」は「NO」を1件持つため1という結果になっています。
なお、同様の処理はCOUNT(CASE WHEN isTopper='no' THEN 1 END)やSUM(IF(isTopper='no', 1, 0))を使っても実現できます。状況に応じて使い分けるとよいでしょう。
-
MySQLでフィールド値に含まれるカンマの数をカウントする方法
MySQLでフィールド値に含まれるカンマの数をカウントする方法カンマ区切りで保存されたデータから、カンマがいくつ含まれているかを調べたいケースは意外と多くあります。MySQLではLENGTH()関数とREPLACE()関数を組み合わせることで、シンプルなクエリひとつでカンマの個数をカウントできます。基本構文以下がカンマをカウントするための基本構文です。select length(対象カラム名) - length(replace(対象カラム名, ,, )) as エイリアス名 from テーブル名;このクエリの仕組みは非常にシンプルです。元の文字列の長さから、カンマをすべて削除した文字列の長さを
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa