3

反対票の値が0ではなく-1であるため、賛成票と反対票を合計しようとしたときにこの問題に気づきました。これにより、SQL sum()関数を使用するときに問題が発生します。例えば、

vote_id   vote
  1        0
  2        1
  3        1

SELECT sum(vote) //output is 2

vote_id   vote
  1       -1
  2        1
  3        1

SELECT sum(vote) //output is 1, which is the desired output

私は最初に、私の質問は、使用0, null, and 1することさえ意味があると思いますか?それとも私はただ使うべき-1, 0, 1ですか?

とにかく、を使用して投票を合計したり、投票を減らしたりするためにSQLクエリがどのように表示されるかを知りたいと思います0, null, and 1

4

7 に答える 7

4

私は個人的に-10およびを使用し1ます。

ただし、0NULLおよび1も機能させることができます。

SELECT SUM(vote * 2 - 1) ...
于 2012-05-04T15:33:15.563 に答える
2

したがって、質問は次のようになります。集計関数を計算するときに除外されますか?NULL

答えはイエスです。Wikipedia の NULL 値に関する記事には、次のように記載されています。

SQL では、データに対するサーバー側の集計計算を簡素化する集計関数が定義されています。ほとんどすべての集計関数は Null 除去ステップを実行するため、Null 値は計算の最終結果に含まれません。ただし、この暗黙的な Null の除去は、集計関数の結果に影響を与える可能性があります。

したがって、集計関数から除外するかどうか、0またはNULL値を除外するかどうかは問題ではありません。SUM

于 2012-05-04T15:35:18.000 に答える
1

このようなものにも使用できますCASE-私はSQL Serverで多くのことを行っており、MySQLでも有効であると想定しています:

SELECT
   SUM(CASE WHEN Vote = 0 THEN -1 ELSE VOTE END) as 'Votes'
FROM
   MyTable
于 2012-05-04T15:36:52.707 に答える
1

オラクルでは

SUM( decode( vote,0,-1,vote ))
于 2012-05-04T15:32:31.460 に答える
1

簡単な計算により、vote 列の値が -1 と +1 に変更されます。

SUM( 2*(vote-0.5))

または、2 つのカウントの差を取ります。

SELECT (SELECT COUNT(*) FROM tbl WHERE vote = 1)
      -(SELECT COUNT(*) FROM tbl WHERE vote = 0)
于 2012-05-04T15:34:10.223 に答える
1

必ず 1、0、および -1 を使用する必要があると思います。すべてが簡単になります。また、単一のビット フィールドを使用してスペースを節約できない場合もあるため、ここでそれを使用しようとする正当な理由はありません。

于 2012-05-04T15:34:28.377 に答える
-1

select count (*) from table where vote <> 1(-1の分)

select count (*) from table where vote = 1(1個分)

于 2012-05-04T15:49:08.130 に答える