mysql - join多表时判断user是否存在于一个sum中

标签 mysql sql

我有 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/

相关文章:

mysql - 如何简单地处理(非常)短的 mysql 复制滞后

javascript - Chart.js折线图改变x轴分离

java - 在 Spring 环境中泄漏 Tomcat JDBC MySQL 驱动程序

mysql - Hive 元存储每四到六个小时就会断开连接

MySQL DISTINCT 函数没有按预期工作

MySQL使用IN()时的顺序

c# - SqlConnection 为空,但为什么呢?

mysql - 在 MYSQL 中,如何获得 LEFT JOIN 返回一个表中的每一行,以及如果另一个表中存在任何匹配行则返回一个标志?

sql - 用另一个表 SQL Server 中的值替换列中的 NA

C# ExecuteScalar() null COUNT 与 SELECT