PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres json_agg include l'intestazione di colonna - JSON errato?

È JSON corretto nel senso che è valido, ma chiaramente non è quello che vuoi. Quindi la risposta dipende dalla definizione di "corretto". Daremo per scontato che ciò che desideri sia "corretto".

Gli stai chiedendo di aggregare u , che è un set di risultati con la colonna team . Ciò significa che dovrà aggiungere queste informazioni al risultato. Dovresti solo chiedere l'aggregazione di u.team , che è il campo che desideri. Quindi otterrai il risultato che desideri.

WITH matches as
(
select 5 as id, '{"Id":1,"Teams":[{"Name":"TeamA","Players":[{"Name":"AAA"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"CCC"},{"Name":"DDD"}]}],"TeamRank":[1,2]}'::json as match
union all
select 6 as id, '{"Id":2,"Teams":[{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}]}],"TeamRank":[1,2]}' as match
)
SELECT json_agg(u.team) FROM (
SELECT DISTINCT ON (t.team->>'Name') t.team
FROM   matches m, json_array_elements(m.match->'Teams') t(team)
ORDER  BY t.team->>'Name', m.id DESC) AS u;

Risultato: