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 数组?

Postgres:获取对应于组中其他列的最大值的列的值

在 Postgres JSON 数组中查询

Postgres获取带列的表架构

如何在 Postgres 中将布尔数组转换为单个布尔值或单个字符串

如何在 AEM 中的 json 中获取布尔值和数值 OOB