小编hom*_*mat的帖子

PostgreSQL 将出现次数计入 json 键/值

给定一个文本元素数组,我想计算出现的次数并将它们作为带有文本键和整数值的子对象返回。(PostgreSQL 9.4)

情况 1 - 没有参考集

SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G','4G']
Run Code Online (Sandbox Code Playgroud)

应该转化为

SELECT '{"2G": 2, "3G": 5, "4G": 1}'::jsonb
Run Code Online (Sandbox Code Playgroud)

案例 2 - 使用参考集

给定一组可能的条目ARRAY['2G','3G','4G'],返回的 json 还应包含计数为零的元素。

SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G']
Run Code Online (Sandbox Code Playgroud)

应该转变为

SELECT '{"2G": 2, "3G": 5, "4G": 0}'::jsonb
Run Code Online (Sandbox Code Playgroud)

我通过使用非常接近案例 1 和 2

-- case 1
SELECT json_object( array_agg(r.a)::text[],array_agg(r.num)::text[] ) 
FROM (
  SELECT a, count(a) as num 
  FROM unnest( ARRAY['3G','2G','2G','3G','3G','3G','3G','4G'] ) a
  GROUP BY a ORDER BY a
) r;

--case 2
SELECT json_object( array_agg(r.ref)::text[],array_agg(r.num)::text[] ) 
FROM (
  SELECT ref, count(a) as num 
  FROM …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql json aggregate postgresql-9.4

5
推荐指数
1
解决办法
3027
查看次数

标签 统计

aggregate ×1

arrays ×1

json ×1

postgresql ×1

postgresql-9.4 ×1