我有一个这样的表:
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_agg
和 hstore(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/