您好,就在我的代码下面:
DROP TABLE if exists project_has_tasks;
CREATE TABLE project_has_tasks (`project_id`int(6),`milestone_id` int(6), `status` varchar(100), `value` int(6));
INSERT INTO project_has_tasks (`project_id`, `milestone_id`, `status`, `value`) VALUES
(56,1, 'undone', 56),
(56,1, 'done', 25),
(56,2, 'done', 25),
(56,3, 'done', 25),
(56,3, 'done', 25),
(56,4, 'undone', 25);
SELECT `milestone_id`, sum(value),
CASE WHEN (status !='done')
THEN (value ='0') ELSE sum(value) END as val
FROM project_has_tasks WHERE project_id='56'
AND milestone_id !=0 GROUP BY milestone_id ASC
结果:
milestone_id | sum(value) | val
1 | 81 | 0
2 | 25 | 25
3 | 50 | 50
4 | 25 | 0
一切看起来都不错,但我想对任务完成和撤消的记录进行求和,这样正确的结果应该如下所示:
milestone_id | sum(value) | val
1 | 81 | 25
2 | 25 | 25
3 | 50 | 50
4 | 25 | 0
因此,milestone_id =1 应等于 25,因为表中我有两个。第一个是撤消(56),第二个是 25(完成),所以结果应该是 25。你们能帮我吗?
最佳答案
你应该稍微改变一下你的 CASE 语句:
SELECT `milestone_id`, sum(value),
SUM(CASE WHEN (status !='done') THEN 0 ELSE value END) as val
FROM project_has_tasks WHERE project_id='56'
AND milestone_id !=0 GROUP BY milestone_id ASC
输出:
milestone_id sum(value) val
1 1 81 25
2 2 25 25
3 3 50 50
4 4 25 0
关于mysql - 如何对一张表中的相同(参数)记录进行求和和分组 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45881142/