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