Mysql 如何对多个字段求和,每个字段有特定的条件
我想给总数加上一个条件。例如,SUM rates.negative将具有以下条件:激活=0 这是链接数据库小提琴 这是没有条件的示例查询Mysql 如何对多个字段求和,每个字段有特定的条件,mysql,Mysql,我想给总数加上一个条件。例如,SUM rates.negative将具有以下条件:激活=0 这是链接数据库小提琴 这是没有条件的示例查询 SELECT comments.*, SUM( rates.score ), SUM( rates.negative ) FROM comments WHERE rates.comment_id = comments.id GROUP BY comments.id
SELECT
comments.*,
SUM(
rates.score
),
SUM(
rates.negative
)
FROM comments
WHERE rates.comment_id = comments.id
GROUP BY comments.id
输出
如果我使用WHEN设置条件,我会得到这个错误
SELECT
comments.*,
SUM(
rates.score
),
SUM(
rates.negative WHEN rates.is_active = '0'
)
FROM comments
WHERE rates.comment_id = comments.id
GROUP BY comments.id
错误
如何解决这个问题
感谢正确的语法是使用表达式进行条件聚合。此外,对于多表查询,为了代码的清晰性和可读性,最好使用
SELECT
c.id,
SUM(
r.score
) AS score_sum,
SUM(
CASE WHEN r.is_active = '0' THEN r.negative ELSE 0 END
) AS negative_sum
FROM comments AS c
LEFT JOIN rates AS r ON (r.comment_id = c.id)
WHERE r.comment_id = c.id
GROUP BY c.id
DB小提琴演示:
数据库文件演示
希望这对你有帮助
SELECT
c.id,
SUM(
r.score
) AS score_sum,
SUM(
CASE WHEN r.is_active = '0' THEN r.negative ELSE 0 END
) AS negative_sum
FROM comments AS c
LEFT JOIN rates AS r ON (r.comment_id = c.id)
WHERE r.comment_id = c.id
GROUP BY c.id
SELECT
CS.id AS comment_id,
SUM(RS.score) AS score_sum,
SUM(CASE RS.is_active WHEN 0 THEN RS.negative ELSE 0 END) AS negative_sum
FROM comments AS CS
LEFT JOIN rates AS RS ON (RS.comment_id = CS.id)
GROUP BY CS.id