外键总和

时间:2016-11-27 14:15:42

标签: sql postgresql pivot

如果有人能帮助我,我会很感激。 在postgres我有一个看起来像这样的表


id     | main_table_id | tax_id | value  | tax_value 
------ | ------------  | ------ | ------ | ------
1      | 1             | 1      | 10.00  | 1.00  
2      | 1             | 2      | 15.00  | 2.00  
3      | 1             | 1      | 17.00  | 3.00  

不知何故,我需要在tax_id上对列'value'和'tax_value'求和,得到这样的结果


| main_table_id | sum_value_1  | sum_value_2  | sum_tax_value_1  | sum_value_2  
| ------------  | ------ ------| ------------ | -----------------| -------
| 1             | 27.00        | 15.00        | 4.00             | 2.00  

sum_value_1是tax_id = 1的总和(值),

sum_value_2是tax_id = 2的总和(值),

sum_tax_value_1是tax_id = 1的总和(tax_value),

sum_tax_value_2是tax_id = 2的总和(tax_value)..

在表'税'中我有10种不同的税,而tax_id是它的FK。

它可以吗?

2 个答案:

答案 0 :(得分:1)

一种方法是条件聚合:

select mt.main_table_id,
       sum(case when mt.tax_id = 1 then mt.value else 0 end) as sum_value_1,
       sum(case when mt.tax_id = 1 then mt.tax_value else 0 end) as sum_tax_value_1,
       sum(case when mt.tax_id = 2 then mt.value else 0 end) as sum_value_2,
       sum(case when mt.tax_id = 2 then mt.tax_value else 0 end) as sum_tax_value_2
from maintable mt
group by mt.main_table_id;

您可以通过添加更多sum( . . . )表达式来轻松概括这一点。

答案 1 :(得分:1)

SELECT SUM(VALUE), SUM(TAX_VALUE) FROM TABLE_NAME GROUP BY TAX_ID;