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

MySQLでSUM()を使って値が0の行も表示する方法

MySQLで値がゼロの行を表示する方法

MySQLでデータを集計する際、条件に一致するレコードが存在しない場合でも、結果として「0」を表示したいケースがあります。このような場合には、集計関数SUM()と条件式を組み合わせることで簡単に実現できます。

本記事では、ステータスごとの件数を集計し、該当するレコードがなくても0を表示する方法を、具体的な手順とともに解説します。

1. テーブルの作成

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> Status varchar(20)
    -> );
Query OK, 0 rows affected (1.22 sec)

2. レコードの挿入

INSERTコマンドを使用して、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable values('active');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('active');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('active');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable values('active');
Query OK, 1 row affected (0.18 sec)

3. テーブルの内容を確認

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

mysql> select *from DemoTable;

実行すると、次のような出力が得られます。

+--------+
| Status |
+--------+
| active |
| active |
| active |
| active |
+--------+
4 rows in set (0.00 sec)

4. 値がゼロの行を表示するクエリ

以下が、値が0の行も含めて結果を表示するためのクエリです。SUM()関数の中に条件式を直接記述しているのがポイントです。

mysql> select
    -> sum(Status='active') as 'CountOfActive',
    -> sum(Status='inactive') as 'CountOfInActive'
    -> from DemoTable;

実行結果は次のとおりです。テーブルには「inactive」のレコードが1件も存在しないため、その列には0が表示されます。

+---------------+-----------------+
| CountOfActive | CountOfInActive |
+---------------+-----------------+
|             4 |               0 |
+---------------+-----------------+
1 row in set (0.30 sec)

仕組みの解説

このテクニックが機能する理由は以下のとおりです。

  • 条件式の評価: MySQLでは Status='active' のような条件式は、真(TRUE)なら1、偽(FALSE)なら0として評価されます。
  • SUM()による合計: SUM()関数がこれらの1と0を合計するため、各条件に一致する行数をカウントできます。
  • 0の表示: 該当するレコードが1件もない場合でも、0の合計として「0」が返されるため、欠落なく集計結果を確認できます。

このように、SUM()と条件式を組み合わせれば、複数のステータスの件数を1つのクエリで同時に取得でき、データが存在しないステータスも明示的に0として扱えるので、レポートやダッシュボードの作成に非常に便利です。

  1. MySQLでNULLを含む列の乗算を処理する方法|COALESCE関数の使い方

    MySQLでNULLを含む列の乗算を正しく計算するにはMySQLでは、数値型の列にNULLが含まれている場合、そのまま乗算すると結果もNULLになってしまいます。このような問題を回避するには、COALESCE() 関数を利用するのが効果的です。COALESCE()は、引数の中から最初に見つかった非NULLの値を返す関数で、NULLを別の値(ここでは「1」)に置き換えて計算できます。以下、実際の手順を見ていきましょう。1. サンプルテーブルを作成するまず、商品点数と金額を格納するテーブルを作成します。mysql> create table DemoTable1842   &nbs

  2. MySQLで重複する列の値ごとに最小値を含む行を取得する方法

    この記事では、MySQLにおいて重複する値を持つ列(ここでは「Class」)ごとに、別の列(「Amount」)の最小値を取得する方法を解説します。GROUP BY句とMIN()関数を組み合わせることで、カテゴリ別の最小値を簡単かつ効率的に抽出できます。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1875 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Class varchar(20), Amount int ); Que