当列值相同时,如何在postgres中合并行,并根据合并的行对另一列求和?

时间:2019-09-23 23:41:49

标签: sql postgresql group-by sum aggregate-functions

给出这样的表结构:

class

和示例数据,例如:

"numeric"

我希望我的选择结果像这样排挤行和求和的总数,我不在乎丢失的数据(行表示无关数据):

id | name | amount | other1 | other2 | other3

我尝试过这样的事情:

1 | a | 40 | unrelevant data | ...
2 | a | 80 | unrelevant data | ...
3 | b | 30 | unrelevant data | ...
4 | b | 50 | unrelevant data | ...
5 | c | 20 | unrelevant data | ...
6 | c | 30 | unrelevant data | ...

我得到了错误:

1 | a | 120 | unrelevant data | ...
3 | b | 80  | unrelevant data | ...
5 | c | 50  | unrelevant data | ...

所以我知道我想念一些东西。

2 个答案:

答案 0 :(得分:1)

您可以将max()用于id

SELECT MAX(id), "name", SUM(amount), MAX(other1) . . .
FROM test_table
GROUP BY "name"

答案 1 :(得分:0)

您可以考虑这样的事情。

SELECT t1.id, t2.name, t1.amount, t2, t2.other1, t2.other2, t2.other3 
FROM (
    SELECT id, SUM(amount) as amount FROM test_table
GROUP BY id) as t1
LEFT JOIN test_table t2 on t2.id = t1.id