我有一个t
包含一些列的表a
,b
并且c
。我使用以下查询将行转换为 JSON 对象数组:
SELECT COALESCE(JSON_AGG(t ORDER BY c), '[]'::json)
FROM t
这将按预期返回:
[
{
"a": ...,
"b": ...,
"c": ...
},
{
"a": ...,
"b": ...,
"c": ...
}
]
现在我想要相同的结果,但只有列a
和b
输出。我仍将使用列c
进行排序。我想出的最好的方法如下:
SELECT COALESCE(JSON_AGG(JSON_BUILD_OBJECT('a', a, 'b', b) ORDER BY c), '[]'::json)
FROM t
[
{
"a": ...,
"b": ...
},
{
"a": ...,
"b": ...
}
]
虽然这很好用,但我想知道是否有更优雅的方法来做到这一点。让我感到沮丧的是,我必须手动定义 JSON 属性。当然,我知道我必须枚举列a
和b
,但奇怪的是我必须复制/粘贴相应的 JSON 属性名,无论如何这与列名完全相同。
还有另一种方法可以做到这一点吗?