Postgres每个唯一ID一个值的总和

时间:2016-08-04 14:54:23

标签: sql postgresql

我必须得到column2中的值的总和,但我应该每个id只计算一次。 例如,对于下表,我需要5 + 10 + 7而不是5 + 5 + 10 + 7

id column1 column2
1  value1  5
1  value1  5
2  value1  10
3  value1  7

后者我通过以下查询获得,但我不知道如何调整它以获得第一笔金额。我应该事先过滤表格,比如选择所有不同的行吗?

SELECT column1, sum(column2) FROM table group by column1;

2 个答案:

答案 0 :(得分:1)

您应该考虑清理数据以删除重复的行。但是,以下查询应首先按id, column1分组以删除重复项,从而获得所需的结果:

select column1, sum(column2)
  from (select id, column1, min(column2) as column2
          from tbl
         group by id, column1) t
 group by column1

答案 1 :(得分:0)

创建自定义聚合:

CREATE OR REPLACE FUNCTION sum_func (
  double precision, pg_catalog.anyelement, double precision
)
RETURNS double precision AS
$body$
SELECT case when $3 is not null then COALESCE($1, 0) + $3 else $1 end
$body$
LANGUAGE 'sql';

CREATE AGGREGATE dist_sum (
  pg_catalog."any", 
  double precision)
(
  SFUNC = sum_func,
  STYPE = float8
);

然后计算不同的总和,例如:

select dist_sum(distinct id, column2)
from table

SQLFiddle