我是 postgres 的新手,我想做的是计算每个月每天的总和值(即每日总和值)。基于分散的信息,我想出了这样的事情:
CREATE OR REPLACE FUNCTION sumvalues() RETURNS double precision AS
$BODY$
BEGIN
FOR i IN 0..31 LOOP
SELECT SUM("Energy")
FROM "public"."EnergyWh" e
WHERE e."DateTime" = day('01-01-2005 00:00:00'+ INTERVAL 'i' DAY);
END LOOP;
END
$BODY$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
ALTER FUNCTION public.sumvalues()
OWNER TO postgres;
查询成功返回,我以为我成功了。然而,当我试图将函数的值插入到表中时(这可能是错误的):
INSERT INTO "SumValues"
("EnergyDC")
(
SELECT sumvalues()
);
我明白了:
错误:类型间隔的输入语法无效:“01-01-2005 00:00:00” 第 3 行:WHERE e."DateTime"= day('01-01-2005 00:00:00'+ INTERVAL...
我尝试自己调试它,但不确定我做错了哪两个(或两个)以及为什么。
这里是 EnergyWh 的例子
(我使用 systemid 和 datetime 作为复合 PK,但这应该无关紧要)
最佳答案
参见 GROUP BY 子句 http://www.postgresql.org/docs/9.2/static/tutorial-agg.html
SELECT EXTRACT(day FROM e."DateTime"), EXTRACT(month FROM e."DateTime"),
EXTRACT(year FROM e."DateTime"), sum("Energy")
FROM "public"."EnergyWh" e
GROUP BY 1,2,3
但以下查询也应该有效:
SELECT e."DateTime"::date, sum("Energy")
FROM "public"."EnergyWh" e
GROUP BY 1
我对 GROUP BY ~ GROUP BY 1 .. 按第一列分组使用了一个简短的语法。
关于postgresql - 在 PostgreSQL 中计算每日总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23407598/