我有 3 个表:
submissions
, submissions_votes
, 和 users
.我当前的查询:
SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes
FROM submissions s
INNER JOIN users u
ON s.user_id = u.id
LEFT JOIN submissions_votes sv
ON s.id = sv.submission_id
WHERE s.id = 23
GROUP BY s.id
将为我返回提交详细信息、提交它的用户以及提交的有用投票数(来自 submissions_votes
表)。
这工作正常,但我想做的是测试 SUM(sv.up) 中的条件,以查看该总和中的任何用户是否与来自 submissions
的特定 user_id 匹配.
我正在考虑做这样的事情,但它不起作用:
SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes,
SUM (IF(sv.user_id = 15, count, 1)) as currentUserVoted, <---- ???
FROM submissions s
INNER JOIN users u
ON s.user_id = u.id
LEFT JOIN submissions_votes sv
ON s.id = sv.submission_id
WHERE s.id = 23
GROUP BY s.id
我如何查看该总和是否与当前用户的 ID(在本例中为 15)匹配?
最佳答案
是的,您可以在 SUM()
中使用条件,就像 SUM (sv.user_id = 15)
将为您提供用户 15 的计数
SELECT
s.*,
u.username,
u.avatar,
SUM(sv.up) helpfulVotes,
SUM(sv.user_id = 15) AS currentUserVoted
FROM
submissions s
INNER JOIN users u
ON s.user_id = u.id
LEFT JOIN submissions_votes sv
ON s.id = sv.submission_id
WHERE s.id = 23
GROUP BY s.id
或者如果您想根据用户 ID 对另一列求和,您可以使用 CASE
SUM (CASE WHEN sv.user_id = 15 THEN sum_other_col ELSE 0 END) as currentUserVoted
关于mysql - join多表时判断user是否存在于一个sum中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21900534/