sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres json_agg inkluderar kolumnrubrik - Felaktig JSON?

Det är korrekt JSON i en mening att det är giltigt, men det är helt klart inte vad du vill ha. Så svaret beror på definitionen av "rätt". Vi kommer att anta att det du vill ha är "rätt".

Du ber den att samla u , som är en resultatuppsättning med kolumnen team . Detta innebär att den måste lägga till denna information till resultatet. Du bör bara be om aggregering av u.team , vilket är det fält du vill ha. Då får du det resultat du vill ha.

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. Oracle SQL Analytic query - rekursiv kalkylbladsliknande löpande totalsumma

  2. MYSQL överför samma eller mindre än saldo

  3. Välj om det finns annat infoga?

  4. EF 4, hur man lägger till delklasser