我有一个3 colum 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}等。 我可以在我的应用程序(在Go中)构建完整的json数组,但它很糟糕。 如何获得完整[{" k1":3},{" k6":5},{" k7":1}]?
SELECT array_to_json(array_agg(row_to_json(tx)))FROM(SELECT k,v FROM tbl)tx;
给我列名,我不想要: [{" K":" K1"" V":3},{" K":" K6" ," v":5}等我需要[{" k1":3},{" k6":5}等等
SELECT JSON_BUILD_OBJECT(k,v)FROM tbl WHERE t = x;
错误,所以我无法过滤t。我不想要GROUP BY,我想分别在3个不同的传递上生成3个不同的json数组,具体取决于WHERE t =的值。 IOW,我不想要[{&#34; y&#34;:[{&#34; k11&#34;:3},{&#34; k4&#34;:2}]等等< / p>
我是Postgres 9.4中json ops的新手,我想在数据库中正确完成json,而不是在它之外搞乱字符串操作。我在这里俯瞰什么?任何帮助将不胜感激。
答案 0 :(得分:2)
with 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