Суммировать все строки из базы данных, если отдельные столбцы в этих строках одинаковы

В моем проекте мне нужно суммировать количество всех строк с одним и тем же типом и теми же параметрами, другие просто оставить как есть. Например, у меня есть такая таблица:

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

Поскольку вы можете видеть, что строки с идентификаторами 1 и 3 суммировали значения, потому что они имеют одинаковый тип и все параметры (param1 и param2 и param3) идентичны. Как я могу это достичь? Я использую mysql.

Заранее спасибо.

Kalreg.

1 ответ

Используйте предложение "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

Удовлетворительно высокий идентификатор помогает:

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

licensed under cc by-sa 3.0 with attribution.