sql - 在 PostgreSQL 中聚合 hstore 列

标签 sql postgresql aggregate-functions postgresql-9.1 hstore

我有一个这样的表:

                         Table "public.statistics"

id         | integer                | not null default nextval('statistics_id_seq'::regclass)
goals      | hstore                 | 

项目:

|id    |goals                  |
|30059 |"3"=>"123"             |
|27333 |"3"=>"200", "5"=>"10"  |

要通过散列中的键聚合所有值,我需要做什么?

我想得到这样的结果:

select sum(goals) from statistics

返回

|goals                 |
|"3"=>"323", "5"=>"10" |

最佳答案

基于 Laurence 的回答,这是一种纯 SQL 方法,使用 array_agghstore(text[ ], text[]) 构造函数。

http://sqlfiddle.com/#!1/9f1fb/17

SELECT hstore(array_agg(hs_key), array_agg(hs_value::text))
FROM (
  SELECT
    s.hs_key, sum(s.hs_value::integer)
  FROM (
    SELECT (each(goals)).* FROM statistics
  ) as s(hs_key, hs_value)
  GROUP BY hs_key
) x(hs_key,hs_value)

我还将 to_number 替换为简单的整数转换,并简化了键/值迭代。

关于sql - 在 PostgreSQL 中聚合 hstore 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020251/

相关文章:

PostgreSQL:显示 TYPE 背后的代码

postgresql - Postgres 外部数据包装聚合函数下推

Mysql错误代码: 1111.组函数使用无效

mysql - 自定义sql查询

sql - 从 plsql 过程参数设置 'Order By' 子句

java - 如何在数据库上执行原始 SQL(而不是在特定表上)

aggregate-functions - 将聚合函数的结果绑定(bind)到投影变量

SQL 而不是触发器有时不触发?

sql - 从 Oracle 中的逗号分隔变量中删除重复值

macos - 无法在 mac os x 上重启 postgres