Mysql 如何对多个字段求和,每个字段有特定的条件

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

我想给总数加上一个条件。例如,SUM rates.negative将具有以下条件:激活=0

这是链接数据库小提琴

这是没有条件的示例查询

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