PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres json_agg zawiera nagłówek kolumny — Nieprawidłowy JSON?

Jest to poprawny JSON w tym sensie, że jest poprawny, ale wyraźnie nie jest tym, czego chcesz. Odpowiedź zależy więc od definicji "poprawny". Założymy, że to, czego chcesz, jest „poprawne”.

Prosisz go o zagregowanie u , który jest zbiorem wyników z kolumną team . Oznacza to, że będzie musiał dodać te informacje do wyniku. Powinieneś poprosić tylko o agregację u.team , czyli pole, które chcesz. Wtedy uzyskasz pożądany rezultat.

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;

Wynik:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak importować i wymagać razem?

  2. Jak wykonać zapytanie wybierające w bloku DO?

  3. Wyświetlanie obrazu w IReports przy użyciu PostgreSql

  4. PostgreSQL:Utwórz indeks dla kolumny logicznej

  5. obsługa torów + postgres i strefy czasowe