在我的项目中,我需要对具有相同类型和相同参数的所有行进行求和,其他的则保持原样。例如我有这样一个表:
id | type | ammount | param1 | param2 | param3
1 | 1 | 5 | 1 | 3 | 2
2 | 1 | 20 | 2 | 3 | 2
3 | 1 | 21 | 1 | 3 | 2
4 | 2 | 10 | 1 | 3 | 2
5 | 2 | 3 | 1 | 2 | 1
我想要达到的结果是:
type | sum of ammount | param1 | param2 | param3
1 | 26 | 1 | 3 | 2
1 | 20 | 2 | 3 | 2
2 | 10 | 1 | 3 | 2
2 | 3 | 1 | 2 | 1
正如您所看到的,id 为 1 和 3 的行已求和,因为它们具有相同的类型并且所有参数(param1、param2 和 param3)都相同。我怎样才能实现这个目标?我用的是mysql。
提前谢谢您。
卡尔雷格。
最佳答案
使用“group by”子句:
use test;
create table Testsum(id int, type int, ammount int, param1 int, param2 int, param3 int);
insert Testsum(id, type, ammount, param1, param2, param3)
values(1, 1, 5, 1, 3, 2),
(2, 1, 20, 2, 3, 2),
(3, 1, 21, 1, 3, 2),
(4, 2, 10, 1, 3, 2),
(5, 2, 3, 1, 2, 1);
/*
id | type | ammount | param1 | param2 | param3
1 | 1 | 5 | 1 | 3 | 2
2 | 1 | 20 | 2 | 3 | 2
3 | 1 | 21 | 1 | 3 | 2
4 | 2 | 10 | 1 | 3 | 2
5 | 2 | 3 | 1 | 2 | 1
*/
select type, sum(ammount) as ammount, param1, param2, param3
from Testsum
group by type, param1, param2, param3;
结果:
type,ammount,param1,param2,param3
1,26,1,3,2
1,20,2,3,2
2,3,1,2,1
2,10,1,3,2
可能最高的 ID 有帮助:
select max(id) as id, type, sum(ammount) as ammount, param1, param2, param3
from Testsum
where ammount is not null or ammount <> 0
group by type, param1, param2, param3 ;
或者指定 min(id) 而不是 max(id) 时的最低 ID。
关于mysql - 总和数据库中特定列的所有行是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982001/