首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据每个字段的特定条件对多个字段求和

如何根据每个字段的特定条件对多个字段求和
EN

Stack Overflow用户
提问于 2019-09-20 12:38:25
回答 2查看 34关注 0票数 0

我想把条件加到和上。例如,SUM rates.negative将具有is_active =0的条件

这是链接DB Fiddle

https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=cd6fe488fcefcd000274a3c67590dede

这是不带条件的示例查询

代码语言:javascript
复制
SELECT 
    comments.*, 
    SUM(
        rates.score
    ), 
    SUM(
        rates.negative
    )  
FROM comments 
    WHERE rates.comment_id = comments.id
GROUP BY comments.id

输出

如果我使用WHEN来设置条件,我会得到这个错误。

代码语言:javascript
复制
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

错误

代码语言:javascript
复制
Error syntax near WHEN rates.is_active = '0'

如何解决这个问题?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-20 12:39:38

正确的语法是使用CASE .. WHEN表达式,用于条件聚合。此外,对于多表查询,为了代码清晰度和可读性,最好使用Aliasing

代码语言:javascript
复制
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 fiddle演示:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6b344f7653249c53a38e64a9f81bee19

票数 0
EN

Stack Overflow用户

发布于 2019-09-20 14:13:09

代码语言:javascript
复制
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

DB文件演示https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=696a1648f0d2a9baa8330ed9b686fd81

希望这能对你有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58021846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档