PostgreSQL Json_build_object / json_agg добавить уровень агрегации - PullRequest
0 голосов
/ 02 марта 2020

Я использую PostgreSQL 10.4, скомпилирован в Visual C ++ build 1800, 64-битный;

Запрос ниже дает набор результатов из 1 столбца с типом JSON и нескольких строк, у меня есть требование что запрос возвращает каждую строку в массив (в основном 1 строку и 1 столбец), например, с помощью json_agg ().

К сожалению, если я поместил json_agg () вокруг json_build_object, я получаю ошибку, которая невозможна:

ERROR:  aggregate function calls cannot be nested
LINE 28:  '$values', json_agg(fv.*)
SELECT json_build_object(
    'id', vl.id,
    'id_form', vl.id_form,
    'id_waardenlijst', vl.id_waardenlijst,
    '$values', json_agg(fv.*)
) FROM var_list vl
    LEFT JOIN testscheme.form_values fv
    on fv.id_form_record = vl.id
    GROUP BY vl.id, vl.id_form, vl.id_waardenlijst

Как добавить еще один уровень агрегации, который возвращает мне 1 столбец и 1 строку с массивом нужных мне объектов?

Надеюсь, мне было ясно!

1 Ответ

1 голос
/ 02 марта 2020

В основном вам нужен другой уровень агрегации:

SELECT json_agg(js) js_final
FROM (
    SELECT json_build_object(
        'id', vl.id,
        'id_form', vl.id_form,
        'id_waardenlijst', vl.id_waardenlijst,
        '$values', json_agg(fv.*)
    ) js
    FROM var_list vl
    LEFT JOIN testscheme.form_values fv ON on fv.id_form_record = vl.id
    GROUP BY vl.id, vl.id_form, vl.id_waardenlijst
) t
...