postgresql - 在 PostgreSQL 中计算每日总和

标签 postgresql sum

我是 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/

相关文章:

sql - 安全地编写动态 SQL,使用在任何 View 中估计行的示例函数

sql - 在 PostgreSQL 中删除具有空名称的表

java - Linux 上的 JOOQ 代码生成失败,java.lang.ClassNotFoundException : org. postgresql.Driver

collections - Clojure:对 map 集合中的值求和

SQL 更新;根据两列(总计)填充 1 列

python - 从 MySQL 迁移到 Postgres 后了解 "SEPARATOR"处或附近的语法错误

java - spring-boot:数据库中断后jdbc重新连接

java - 如何找到多维数组的值总和并替换未使用索引的值?

r - R中的条件和

mysql - 如何将table1.column1的值设置为table2.column2的平均值