0

COUNT() が引数として * とともに使用され、GROUP BY が何をカウントするかを決定するのを常に見てきましたが、サブクエリ、グループ化、および結合を行わなくても、さまざまなものをカウントできると確信しています (私が今やっていることです)。

SO の簡略化されたバージョンから例を作成しましょう。

Table Question
idQuestion | title | idUser

Table Answer
idAnswer | idQUestion | text | idUser

Table Vote
idVote | idAnswer | type | idUser

Table Comment
idComment | idAnswer | text | idUser 

すべての回答に対するコメントと投票の数を知るには、次のようにします。

SELECT idAnswer, votes, comments FROM
   (SELECT idAnswer, count(*) AS votes FROM Answer A
       JOIN Vote B ON A.idAnswer=B.idAnswer
    GROUP BY idAnswer) AS X
JOIN
   (SELECT idAnswer, count(*) AS comments FROM Answer A
       JOIN Comment B ON A.idAnswer=B.idAnswer
    GROUP BY idAnswer) AS Y
ON X.idAnswer=Y.idAnswer

これは副選択なしで行うことができますか? それらを避けることによって何かが達成されますか?

同じクエリで反対票と賛成票をカウントするにはどうすればよいですか?

4

1 に答える 1

1
SELECT idAnswer, COUNT(DISTINCT VOTE.idVote), COUNT(DISTINCT comments)
FROM Answer 
LEFT JOIN COMMENT ON Answer.idAnswer = Comment.idAnswer
LEFT JOIN VOTE ON Answer.idAnswer = Vote.idAnswer
GROUP BY idAnswer

質問の 2 番目の部分については、Andriy M に感謝します。

SELECT
  Answer.idAnswer,
  COUNT(DISTINCT CASE WHEN VOTE.type = 'up' THEN VOTE.idVote END) AS upvotes,
  COUNT(DISTINCT CASE WHEN VOTE.type = 'down' THEN VOTE.idVote END) AS downvotes,
  COUNT(DISTINCT comments) as comments
FROM Answer 
LEFT JOIN COMMENT ON Answer.idAnswer = Comment.idAnswer
LEFT JOIN VOTE ON Answer.idAnswer = Vote.idAnswer
GROUP BY Answer.idAnswer
于 2013-08-29T17:34:02.970 に答える