sql >> Database >  >> RDS >> PostgreSQL

Postgres json_agg bevat kolomkop - Onjuiste JSON?

Het is de juiste JSON in die zin dat het geldig is, maar het is duidelijk niet wat je wilt. Het antwoord hangt dus af van de definitie van "juist". We gaan ervan uit dat wat je wilt "correct" is.

Je vraagt ​​het om u . te verzamelen , wat een resultatenset is met kolom team . Dit betekent dat deze informatie aan het resultaat moet worden toegevoegd. Vraag alleen om aggregatie van u.team , wat het gewenste veld is. Dan krijgt u het gewenste resultaat.

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;

Resultaat:




  1. Grails:dataSource-url tijdens runtime wijzigen om databasescheiding met meerdere tenants te bereiken

  2. Hoe te controleren of index wordt gebruikt of niet in Oracle

  3. Waarom krijg ik een Oracle-fout bij het aanroepen van een procedure met C#?

  4. Datum (jjjj/mm/dd) extraheren uit een tijdstempel in PostgreSQL