sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres json_agg incluye encabezado de columna:¿JSON incorrecto?

Es JSON correcto en el sentido de que es válido, pero claramente no es lo que quieres. Así que la respuesta depende de la definición de "correcto". Asumiremos que lo que desea es "correcto".

Le estás pidiendo que agregue u , que es un conjunto de resultados con la columna team . Esto significa que tendrá que agregar esta información al resultado. Solo debe solicitar la agregación de u.team , que es el campo que desea. Entonces obtendrás el resultado que deseas.

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;

Resultado: