MySQL Case 语句与聚合函数

标签 mysql case

我被 MySQL CASE 语句困住了。我有以下场景,我的表有以下记录:

Header_ID   |  Marks  
------------|----------  
55          |   0  
55          |   2  
66          |   5  
66          |   6  

我想总结一下 Header_ID 方面的标记。但对于任何给定的 header ,如果 Marks 为 0(零),则 SUM 必须设置为 0。因此结果应如下所示:

Header_ID   | TOTAL_Marks  
------------|------------  
55          |    0 --> One of the Header has 0 marks so I must have 0 here.  
66          |    11 --> This is sum of Marks for Header_ID 66  

我尝试使用带有“SUM”函数的 CASE 语句,但得到的结果如下:

SELECT  
    S.`headerid` AS `HEADER_ID`,  
    CASE  
      WHEN S.`mark` = 0 THEN 0  
      ELSE SUM(S.`mark`)  
    END AS `TOTAL_MARKS`  
FROM sample_db.sheet_data S  
GROUP BY S.`headerid`;  

RESULT:  
HEADER_ID  |  TOTAL_MARKS  
-----------|-------------  
55         |   2  --> Here it is not getting the expected value.  
66         |   11 --> This is sum of Marks for Header_ID 66  

SUM 函数是 CASE 语句,返回值 2,我想将其设置为 0。

有人可以帮我吗?

最佳答案

这里我使用 IF 来考虑 mark 的每个值。如果值为零,IF 返回 1,否则返回 0。

然后将这些值传递给 SUM 以计算有多少个值为零。该总和被传递给另一个 IF,对于任何正数的零值,它返回 0,否则返回 markSUM。即使值的顺序发生变化,这也应该起作用,例如,对于特定的 headerid,零值不是第一个:

SELECT S.headerid as `HEADER_ID`,
    IF(SUM(IF(S.`mark` = 0, 1, 0)) > 0, 0, SUM(S.`mark`)) AS `TOTAL_MARKS`
FROM sample_db.sheet_data S
GROUP BY S.`headerid`;

关于MySQL Case 语句与聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564823/

相关文章:

mysql - MySQL UPDATE ... JOIN ... CASE 的语法是否正确?

mysql - 创建外键时自动增量是否有影响?

MySQL 友谊模式

mysql - 允许从任何地方连接数据库?

sql - ORA-00905: 缺少关键字

SQL查询-如何增加员工的工资,不超过一定的工资限制

sql - 使用 CASE 在 SQL 中使用 if/else 逻辑正确计算项目

MySQL 服务器套接字 '/tmp/mysql.sock' 连接问题

mysql - Node.js 中的 session 存储首选项

java - 如何循环case of语句?