加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostreSQL中的聚合hstore列

发布时间:2020-12-14 00:51:39 所属栏目:百科 来源:网络整理
导读:我有这样一张桌子: 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" | 我需要做什么来通过哈希键来聚合所有值? 我
我有这样一张桌子:
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 [])构造函数将总和的键/值对聚合到一个新的hstore中.

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,并简化了键/值迭代.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读