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

Postgres json_agg inkluderer kolonneoverskrift - Forkert JSON?

Det er korrekt JSON på en måde, at det er gyldigt, men det er tydeligvis ikke, hvad du ønsker. Så svaret afhænger af definitionen af ​​"korrekt". Vi vil antage, at det du ønsker er "korrekt".

Du beder den om at samle u , som er et resultatsæt med kolonnen team . Det betyder, at den bliver nødt til at tilføje disse oplysninger til resultatet. Du bør kun bede om sammenlægning af u.team , hvilket er det felt, du ønsker. Så får du det resultat, du ønsker.

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;

Resultat:




  1. Lær om sammenkædning i SQL med eksempler

  2. hvad er forskellen mellem 'ændre tabel omdøb' og 'omdøb tabel'?

  3. Topfunktioner at se efter i et SQL Server-overvågningsværktøj

  4. Låsning og samtidighed med MySQL