PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres json_agg включва заглавка на колона - Неправилен JSON?

Това е правилен JSON в смисъл, че е валиден, но очевидно не е това, което искате. Така че отговорът зависи от определението за „правилно“. Ще приемем, че това, което искате, е „правилно“.

Искате от него да агрегира u , което е набор от резултати с колона team . Това означава, че ще трябва да добави тази информация към резултата. Трябва да поискате само агрегиране на u.team , което е полето, което искате. Тогава ще получите желания резултат.

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;

Резултат:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. намиране на MAX(db_timestamp) заявка

  2. Защо резултатът от COUNT се удвоява, когато се присъединя към две?

  3. Как да промените потребителска парола в PostgreSQL

  4. Режимът H2 postgresql изглежда не работи за мен

  5. Добавянето на колона като външен ключ дава ГРЕШКА колона, посочена в ограничението за външен ключ, не съществува