私は3列のPostgreSQL 9.4.4 tblを持っています。ここで、k:TEXT、UNIQUE、v:INT、t:TEXTです。
k v t
----------------
k1 3 x
k6 5 x
k11 3 y
k3 2 z
k4 2 y
k7 1 x
.. . .
3つのJSON配列を別々に自動生成しようとしています:
1. [{"k1":3},{"k6":5},{"k7":1}] (WHERE t=x)
2. [{"k11":3},{"k4":2}] (WHERE t=y)
3. [{"k3":2}] (WHERE t=z)
質問:
- 最初、
SELECT JSON_BUILD_OBJECT(k、v)FROM tbl
私に個々のjson要素{"k1":3}、{"k6":5}などを与えます 私は私のアプリ(移動)で完全なjson配列を構築することができますが、それはハッキーです。 [{"" k1 ":3}、{" k6 ":5}、{" k7 ":1}"をどのようにして入手できますか?
SELECT array_to_json(array_agg(row_to_json(tx)))FROM(SELECT k、v FROM tbl)tx;
私が望んでいない列名を私に与えます: [{"" k1 ":3}、{" k ":" k6 "、" v ":5} 5}など
- また、
SELECT JSON_BUILD_OBJECT(k、v)FROM tbl WHERE t = x;
エラーが発生するので、私はtをフィルタリングできません。 私はGROUP BYを必要としません、3つの異なったパスで3つの異なるjson配列を別々に生成したいのですが、WHERE t =の値に応じてIOW、{{"y":[{"k11" :3}、{"k4":2}など
私はPostgres 9でjsonの操作に新しいです。4、私はDBの中で適切に行われているjsonをDBの外で操作するのが好きですが、ここで見落としているのは何ですか?
回答:
回答№1は2with s (k,v,t) as ( values
("k1",3,"x"),
("k6",5,"x"),
("k11",3,"y"),
("k3",2,"z"),
("k4",2,"y"),
("k7",1,"x")
)
select t, array_to_json(array_agg(json_build_object(k,v)))
from s
where t = "y"
group by t