Postgres:如何获取多个布尔列的 json 数组?
Posted
技术标签:
【中文标题】Postgres:如何获取多个布尔列的 json 数组?【英文标题】:Postgres: How to get json array of multiple boolean columns? 【发布时间】:2017-09-11 07:07:03 【问题描述】:PG_VERSION:9.2
我有一个带有多个布尔标志的表。
例如:
id,flag1,flag2,flag3
问题是,我想获取这些标志的 json 数组,其计数如下:
["title":"flag1","count":2,"title":"flag2","count":3,"title":"flag3","count":0]
如何达到这个结果?试过这个
create or REPLACE function count_test(OUT json_string text) returns text
LANGUAGE plpgsql AS $$
BEGIN SELECT array_to_json(array_agg(rows))into json_string FROM ( select sum(case when flag1 then 1 else 0 end) as flag1,
sum(case when flag2 then 1 else 0 end) as flag2,
sum(case when flag3 then 1 else 0 end) as flag3 FROM flags
) rows;
END;
$$;
但是有了这个我只能得到
["flag1":2,"flag2":2,"flag3":0]
等待立即响应。
【问题讨论】:
而不是大小写我宁愿投flag1::int
?..所以sum(flag1::int)
看起来更具可读性
【参考方案1】:
您可以将 row_to_json
结果聚合到数组,然后尝试将其转换为 json 等等,但考虑到 9.2 中对 json 的支持非常有限,我只需要从字符串构建 json,例如:
postgres=# with flags(id,flag1,flag2) as (values(1,true,true),(2,false,true))
, s as (select sum(flag1::int) as f1, sum(flag1::int) as f2 from flags)
select concat('["title":"flag1","count":',f1,',"title":"flag2","count":',f2,']')::json from s;
concat
-----------------------------------------------------------
["title":"flag1","count":1,"title":"flag2","count":1]
(1 row)
【讨论】:
以上是关于Postgres:如何获取多个布尔列的 json 数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Postgres 中选择一列 json 对象,以便返回的行是 json 数组?