我有一个这样的表:
Table "public.statistics"
id | integer | not null default nextval('statistics_id_seq'::regclass)
goals | hstore |
items:
|id |goals |
|30059 |"3"=>"123" |
|27333 |"3"=>"200", "5"=>"10" |
我需要做什么才能按哈希中的键聚合所有值?
我想得到这样的结果:
select sum(goals) from statistics
return
|goals |
|"3"=>"323", "5"=>"10" |
基于 Laurence 的答案,这里有一种纯 SQL 方法,用于将求和的键/值对聚合成一个新的hstore
using 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
简单地转换为整数并简化了键/值迭代。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)