【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法
特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1790
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(20),
Score int
);
Query OK, 0 rows affected (0.94 sec)
続いて、INSERTコマンドでテーブルにレコードを挿入します。
mysql> insert into DemoTable1790(Name,Score) values('Chris',45);
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable1790(Name,Score) values('David',55);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1790(Name,Score) values('David',98);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1790(Name,Score) values('Chris',91);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1790(Name,Score) values('Mike',99);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1790(Name,Score) values('Carol',55);
Query OK, 1 row affected (0.35 sec)
SELECT文ですべてのレコードを確認してみましょう。
mysql> select * from DemoTable1790;
上記クエリの実行結果は次のとおりです。
+----+-------+-------+ | Id | Name | Score | +----+-------+-------+ | 1 | Chris | 45 | | 2 | David | 55 | | 3 | David | 98 | | 4 | Chris | 91 | | 5 | Mike | 99 | | 6 | Carol | 55 | +----+-------+-------+ 6 rows in set (0.00 sec)
単一クエリで複数のカウントを取得する
以下のように、SUM()の中に条件式を記述することで、Name列が「Chris」であるレコード数と、Score列が55であるレコード数を同時に取得できます。
mysql> select sum(Name='Chris'),sum(Score=55) from DemoTable1790;
実行結果は次のようになります。
+-------------------+---------------+ | sum(Name='Chris') | sum(Score=55) | +-------------------+---------------+ | 2 | 2 | +-------------------+---------------+ 1 row in set (0.00 sec)
このように、条件式の評価結果(1または0)をSUM()で合計すれば、COUNT()を何度も実行することなく、1つのクエリで異なる条件のカウントを効率的に取得できます。なお、より複雑な条件でカウントしたい場合は、CASE式をSUM()内で使う方法も便利なので、あわせて覚えておくとよいでしょう。
-
MySQLでNULL値を特定の値に置き換える方法:IFNULL()関数の使い方
MySQLでは、IFNULL()関数を使用することで、列に含まれるNULL値を検出し、任意の特定の値に置き換えて表示することができます。この記事では、サンプルテーブルの作成からIFNULL()を使ったクエリの実行まで、具体的な手順をわかりやすく解説します。 サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成しましょう。ここでは、名前を格納する「FirstName」列を持つテーブルを定義します。 mysql> create table DemoTable1878 ( FirstName varchar(20) ); Query OK, 0 rows af
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実