mysql - 如何对一张表中的相同(参数)记录进行求和和分组 MySQL

标签 mysql parameters count sum

您好,就在我的代码下面:

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/

相关文章:

mysql - 如何使用 MySQL 设置 Docker for Symfony 项目?

mysql - Ruby dbi mysql 连接

parameters - 当函数需要两个参数时,如何只将一个参数传递给它?

sql - 获取 GROUP BY 记录子集的计数

javascript - 如何计算 Excel 表格中数据的行数

php - 管理 Codeigniter 分页

javascript - 绘制温度的平均值

c# - 确定方法接受的参数数量

javascript - 从 angularjs 中的 Controller 中删除路由参数?

count - MYSQL - 选择两个表中行数的差异