我有一个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 属性名,无论如何这与列名完全相同。
还有另一种方法可以做到这一点吗?