MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで列内の「0より大きい値」と「0に等しい値」をそれぞれカウントする方法

MySQLでは、CASE文とSUM関数を組み合わせることで、「0より大きい値」と「0に等しい値」の件数を1回のクエリで同時に集計できます。ここでは、その具体的な手順をサンプル付きで解説します。

1. サンプルテーブルを作成する

まず、数値を格納するテーブルを作成しましょう。

mysql> create table DemoTable
    (
    Number int
    );
Query OK, 0 rows affected (0.83 sec)

2. テストデータを挿入する

INSERTコマンドを使って、レコードをいくつか登録します。

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.15 sec)

3. 登録したデータを確認する

SELECT文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

出力結果

+--------+
| Number |
+--------+
| 10     |
| 0      |
| 20     |
| 50     |
| 0      |
| 0      |
| 40     |
+--------+
7 rows in set (0.00 sec)

7件のレコードが登録されました。このうち「0より大きい値」は4件(10、20、50、40)、「0に等しい値」は3件あることが目視で確認できます。

4. CASE文で条件ごとの件数を集計する

それでは本題です。CASE文で各レコードが条件に該当するかどうかを判定し、その結果をSUM関数で合計することで、条件別の件数を取得できます。

mysql> select sum(case when Number > 0 then 1 else 0 end )
    AS TotalValueWhichIsGreaterThanZero,
    sum(case when Number = 0 then 1 else 0 end) AS TotalValueWhichIsEqualToZero
    from DemoTable where Number >=0;

出力結果

+----------------------------------+------------------------------+
| TotalValueWhichIsGreaterThanZero | TotalValueWhichIsEqualToZero |
+----------------------------------+------------------------------+
| 4                                | 3                            |
+----------------------------------+------------------------------+
1 row in set (0.00 sec)

クエリのポイント

  • sum(case when Number > 0 then 1 else 0 end): 各行が「0より大きい」場合は1、そうでなければ0を返し、その合計で件数を求めています。
  • sum(case when Number = 0 then 1 else 0 end): 同様に「0に等しい」行だけを1としてカウントしています。
  • where Number >= 0: 負の値が混在している場合でも、0以上の値のみを対象にしたいときに指定します。必要に応じて削除・変更してください。

このようにCASE式を活用すれば、複数の条件ごとの集計を1つのクエリで効率よく実現できます。ログ分析や売上データの集計など、条件分岐を伴う統計処理にぜひ活用してください。

  1. MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法

    ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形

  2. MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法

    MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975     (     StudentNa