Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有聚合函数的MySQL Case语句_Mysql_Case - Fatal编程技术网

带有聚合函数的MySQL Case语句

带有聚合函数的MySQL Case语句,mysql,case,Mysql,Case,我被MySQL的案例陈述卡住了。我有以下场景,我的表有以下记录: Header_ID | Marks ------------|---------- 55 | 0 55 | 2 66 | 5 66 | 6 我想总结一下这些分数。但对于任何给定的标题,如果标记为0(零),则总和必须设置为0。因此,结果应如下所示: Header_ID | TOTAL_Marks -----

我被MySQL的案例陈述卡住了。我有以下场景,我的表有以下记录:

Header_ID   |  Marks  
------------|----------  
55          |   0  
55          |   2  
66          |   5  
66          |   6  
我想总结一下这些分数。但对于任何给定的标题,如果标记为0(零),则总和必须设置为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  
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语句,但得到的结果如下:

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  
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


谁能帮我一下吗?

我以前贴错了答案。所以我正在编辑我的答案。以下是完整的演示:-

CREATE TABLE mark
(head_id INT, marks INT)

INSERT INTO mark VALUES (55,0)
INSERT INTO mark VALUES (55,2)
INSERT INTO mark VALUES (77,1)
INSERT INTO mark VALUES (77,0)

SELECT * FROM mark


这里,我使用<代码>如果考虑每个值为代码>标记< /代码>。如果该值为零,则
If
返回1,否则返回0

然后将这些值传递给
SUM
,以计算有多少值为零。该和传递给另一个
IF
,该值对任何正值返回0,或者
mark
sum
。即使值的顺序发生变化,例如当某个特定的
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`;

嗨@JYelton,我编辑了我的答案。感谢您的正确指导:)这是最有效的方法。同样的方法可以使用一个等价但更难处理的
CASE
表达式来代替
IF