我有两个表如下:
tbl_answers : id, (FK)authorID ...
tbl_answer_votes : id, (FK)voterID, (FK)answerID, vote (sInt, only ever -1 or 1)
tbl_answers
与 tbl_answer_votes
具有一对多关系,投票可以是负 1 或正 1。
我需要将 tbl_answer_votes
加入到 tbl_answers
中,但将对该答案的所有反对票的总和和对该答案的所有肯定票的总和作为两个单独的列.
我可以通过子查询来做到这一点,但因为它只是更大查询的一小部分,在阅读了子查询的陷阱之后,我想尝试从投票表中生成这两个负和正和作为尽可能高效。
最佳答案
您可以使用 CASE
和 JOIN
来完成此操作:
SELECT
a.id,
SUM(CASE v.vote when 1 then 1 else 0 end) as UpVotes,
SUM(CASE v.vote when -1 then 1 else 0 end) as DownVotes
FROM
tbl_answers a
INNER JOIN
tbl_answer_votes v
ON
v.id = a.id
GROUP BY
a.id
这会返回 tbl_answers
中的 ID
以及 tbl_answer_votes
中任一值的总票数的两列。您没有指定您希望从任一表中获得哪些(如果有的话)其他列,因此您可能必须调整 SELECT
和 GROUP BY
中的列列表部分以添加额外的列。
关于没有子查询的MySQL求和负值和正值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041788/