我必须得到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;
答案 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