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

MySQLで賛成票と反対票の数を数える方法

MySQLでテーブル内の賛成票(正の値)と反対票(負の値)の数をそれぞれカウントしたい場合、CASE文集計関数SUM()を組み合わせることで簡単に実現できます。

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

まず、投票データを格納するテーブルを作成します。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Vote int
);
Query OK, 0 rows affected (1.70 sec)

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

次に、INSERTコマンドを使っていくつかのレコードを追加します。正の値と負の値を混ぜて登録します。

mysql> insert into DemoTable(Vote) values(-10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Vote) values(100);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Vote) values(45);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Vote) values(-6);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Vote) values(-1000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Vote) values(450);
Query OK, 1 row affected (0.14 sec)

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

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

mysql> select *from DemoTable;

実行結果は以下の通りです。

+----+-------+
| Id | Vote  |
+----+-------+
| 1  | -10   |
| 2  | 100   |
| 3  | 45    |
| 4  | -6    |
| 5  | -1000 |
| 6  | 450   |
+----+-------+
6 rows in set (0.00 sec)

4. 賛成票と反対票をカウントするクエリ

ここが本題です。CASE文で「Vote > 0」なら1、「Vote < 0」なら1を返すように条件分岐し、それをSUM()で合計することで、正と負それぞれの件数を一度に取得できます。

mysql> select sum(case when Vote > 0 then 1 else 0 end) as Number_Of_Positive_Votes,
sum(case when Vote < 0 then 1 else 0 end) as Number_Of_Negative_Votes
from DemoTable;

実行結果は以下のようになります。

+--------------------------+--------------------------+
| Number_Of_Positive_Votes | Number_Of_Negative_Votes |
+--------------------------+--------------------------+
| 3                        | 3                        |
+--------------------------+--------------------------+
1 row in set (0.00 sec)

解説

このクエリの仕組みは以下の通りです。

  • sum(case when Vote > 0 then 1 else 0 end):Vote列の値が0より大きい場合に1を返し、それ以外は0を返します。これを合計することで賛成票(正の値)の総数が得られます。
  • sum(case when Vote < 0 then 1 else 0 end):同様に、Vote列の値が0未満の場合に1を返すことで、反対票(負の値)の総数をカウントできます。

今回のサンプルデータでは、正の値が3件(100、45、450)、負の値が3件(-10、-6、-1000)だったため、両方とも「3」という結果になりました。

なお、COUNT()関数を使ったcount(case when Vote > 0 then 1 end)のような書き方でも同じ結果が得られます。用途に応じて使い分けるとよいでしょう。

  1. C#で数値が正・負・ゼロ、奇数・偶数のいずれかを判定するプログラム

    この記事では、C#を使ってある数値が正の数、負の数、ゼロ、奇数、偶数のいずれに該当するかを判定する方法を解説します。奇数・偶数の判定方法奇数か偶数かを判別するには、剰余演算子 % を使って、その数値を2で割った余りを確認します。余りが0であれば偶数、そうでなければ奇数と判定できます。// 奇数・偶数の判定 if(n % 2 == 0) { Console.WriteLine(Even); } else { Console.WriteLine(Odd); }正の数・負の数・ゼロの判定方法数値が負の数か、ゼロか、正の数かを判別するには、if-else if-else 文による条件分

  2. 数値が正か負かを判定するJavaプログラムの書き方

    この記事では、Javaを使って入力された数値が「正の数」なのか「負の数」なのかを判定する方法を解説します。判定の考え方はシンプルで、対象の数値が0より大きいか小さいかを比較するだけで実現できます。それでは、実際の動作例を見ていきましょう。入力例ユーザーが次のように数値を入力したとします。Enter the number: -30出力例この場合、プログラムは次のような結果を出力します。The number -30 is a negative number処理のアルゴリズム正負の判定は、以下の手順で行います。Step 1 - 処理を開始する Step 2 - 整数型の変数 my_input を宣言