2014-01-07 38 views
0

在我的項目中,我需要對所有具有相同類型和相同參數的行進行總計,其他只是保持原樣。例如爲我有這樣一個表:如果這些行中的特定列相同,則從數據庫中總結所有行

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行已經總結ammounts因爲他們有相同的類型和所有參數(param1和param2和param3)是相同的。我怎樣才能做到這一點?我使用mysql。

預先感謝您。

Kalreg。

回答

0

使用 「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 

Propably最高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 ; 

,或者指定的最低ID min(id)而不是max(id)。

+0

謝謝,它的工作原理。但如果我添加選擇「ID」,看看哪些行選擇組顯示只有一個(我猜最後)身份證號碼。在某個地方是否存儲了一個數組,其中包含所有行的ID,這些行在一起分組? – Kalreg

+0

所以你想要的ID 1和ID 3的總和:查詢顯示哪個ID?看看我編輯的答案。 – Ice

+0

我的意思是所有的ID都像我可以創建額外的列稱爲ids,它可以存儲在這個組中的所有ID,即1,3在這種情況下 – Kalreg

相關問題