У меня есть таблица 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, которое в любом случае точно такое же, как имя столбца.
Есть ли другой способ сделать это?