Re: coalesce(json_agg [..] filter where [..], '[]' in left join returning null

Поиск
Список
Период
Сортировка
От Stefan Houtzager
Тема Re: coalesce(json_agg [..] filter where [..], '[]' in left join returning null
Дата
Msg-id CANJtTDk-iqkiUvLLMxCf9dgwtMZi7vhmwzSKXejgc4d9wvbMpg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: coalesce(json_agg [..] filter where [..], '[]' in left join returning null  ("David G. Johnston" <david.g.johnston@gmail.com>)
Ответы Re: coalesce(json_agg [..] filter where [..], '[]' in left join returning null  ("David G. Johnston" <david.g.johnston@gmail.com>)
Список pgsql-novice
Thanks David!

When I run the following in pgadmin I get the error that follows at the bottom. Any idea how to get the query right?

select
         json_agg(
         (select row_to_json(_) from
                  (select vc.id, vc.descr, vc.expense, vc.version, vat_percentage) as _
              )    
         )    
        from vat_cat vc
        left join (
            select
                vatcat_id,
                COALESCE(NULLIF(
                  json_agg(
                        (select row_to_json(_) from
                            (select vp.percentage, vp.version, json_build_object(
                                'lower', lower(vp.validity),
                                'upper', upper(vp.validity),
                                'lower_inc', lower_inc(vp.validity),
                                'upper_inc', upper_inc(vp.validity)
                            ) validity)
                          as _)
                  ),
                'null'::json), '[]'::json) vat_percentage
            from vat_percentage vp
            group by vatcat_id
        ) vp on vc.id = vp.vatcat_id

ERROR: operator does not exist: json = json LINE 11: COALESCE(NULLIF( ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SQL state: 42883 Character: 306  

On Wed, Jan 6, 2021 at 4:10 PM David G. Johnston <david.g.johnston@gmail.com> wrote:
On Wed, Jan 6, 2021 at 3:11 AM Stefan Houtzager <stefan.houtzager@gmail.com> wrote:

                COALESCE(

                json_agg(
                       (select row_to_json(_) from
                           (select vp.percentage, vp.version, json_build_object(
                               'lower', lower(vp.validity),
                               'upper', upper(vp.validity),
                               'lower_inc', lower_inc(vp.validity),
                               'upper_inc', upper_inc(vp.validity)
                           ) validity)
                        as _)
                ) FILTER (WHERE vp.vatcat_id IS NOT NULL), '[]'::JSON) vat_percentage
{ "vat_cat": { "id": 10, "descr": "nonsense", "expense": true, "version": 1, "vat_percentage": null } } 

How do I get the query right so that it display [] instead of null?


Use COALESCE(NULLIF(..., 'null'::json), '[]'::json); NULLIF converts the JSON null into SQL NULL which the COALESCE then replaces with a empty json array.

David J.



--
Kind regards,

Stefan Houtzager

Houtzager ICT consultancy & development

www.linkedin.com/in/stefanhoutzager

В списке pgsql-novice по дате отправления:

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: coalesce(json_agg [..] filter where [..], '[]' in left join returning null
Следующее
От: Pól Ua Laoínecháin
Дата:
Сообщение: Understanding aggregation and window functions.