sql >> Databáze >  >> RDS >> PostgreSQL

Postgres json_agg obsahuje záhlaví sloupce – nesprávný JSON?

Je to správný JSON v tom smyslu, že je platný, ale zjevně to není to, co chcete. Odpověď tedy závisí na definici „správného“. Budeme předpokládat, že to, co chcete, je „správné“.

Žádáte o agregaci u , což je sada výsledků se sloupcem team . To znamená, že bude muset tyto informace přidat k výsledku. Měli byste požádat pouze o agregaci u.team , což je pole, které chcete. Pak získáte požadovaný výsledek.

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;

Výsledek:




  1. Export dat do Excelu z tabulky Oracle pomocí PL SQL

  2. PostgreSQL Upsert s klauzulí WHERE

  3. Připojení ke vzdálené databázi Oracle DB s Nodejs prostřednictvím ovladače Oracledb

  4. Oracle zkopíruje data do jiné tabulky