1

SUM特定のユーザーがこのアイテムに投票したかどうかを返しながら、特定のアイテムに賛成票と反対票を投じる方法がわかりません。

ここに私の投票表があります:

item_id vote voter_id
1        -1     joe
1         1     bob
1         1     tom
3         1     bob

item_id=1表示したいデータは次のとおりです。

ページを見ている場合Joe:

total up votes: 2
total down votes: 1
my_vote: -1

Bob:

total up votes: 2
total down votes: 1
my_vote: 1

これが私のコードです:

SELECT MAX(CASE WHEN voter_id = 'joe' and vote=1 THEN 1 
WHEN voter_id = 'joe' and vote='-1' THEN -1
ELSE 0 END)
AS my_vote, item_id, sum(vote=1) yes, sum(vote='-1') no
FROM Votes
WHERE item_id=1

問題は、関数と(ジョーのシナリオ)my_vote=0を使用する場合です。同様に、MIN 関数と(ボブのシナリオ) を使用するとします。MAXvote=-1my_vote=0vote=1

考え?

4

4 に答える 4

3
SELECT
  item_id,
  MAX(CASE WHEN voter_id = 'Joe' THEN vote ELSE NULL END)   AS my_vote,
  sum(vote= 1)   AS yes_votes,
  sum(vote=-1)   AS no_votes
FROM
  Votes
WHERE
  item_id = 1
GROUP BY
  item_id


または、おそらくより柔軟に...

SELECT
  Votes.item_id,
  MAX(CASE WHEN Users.user_id IS NOT NULL THEN Votes.vote ELSE NULL END)   AS my_vote,
  sum(Votes.vote= 1)   AS yes_votes,
  sum(Votes.vote=-1)   AS no_votes
FROM
  Votes
LEFT JOIN
  Users
    ON  Users.user_id = Votes.voter_id
    AND Users.user_id = 'Joe'
WHERE
  Votes.item_id = 1
GROUP BY
  Votes.item_id
于 2013-07-31T21:01:04.433 に答える
0

このようなものを使用できます

説明として「総賛成票」を選択し、item_id=1 および投票=1 の投票から num として count(*) を選択します。すべて「my_vote」を descr として選択し、item_id=1 およびvoter_id = 「joe」の投票から投票します。

于 2013-07-31T21:29:53.573 に答える