PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consultar combinações de JSON retorna resultados ímpares


Uma pessoa gentil do canal IRC do Postgresql ajudou a encontrar a resposta e elaborar a consulta correta. O crédito é realmente dele, não meu.

Ele ajudou a perceber que os álbuns e srcs deveriam ser adicionados a arrays para comparação. Por exemplo:
SELECT array_agg(rep_id), count(*) AS ct
FROM (SELECT rep_id, 
             data->>'background' as background, 
             array_agg(o->>'album' order by o->>'album') as albums, 
             array_agg(o->>'src' order by o->>'album') as srcs  
           FROM reports r, 
           json_array_elements(r.data->'objects') o 
           GROUP BY rep_id) s 
GROUP BY background, albums, srcs
ORDER BY count(*) DESC
LIMIT 5;

Não sei se essa é a melhor forma de fazer isso, mas funciona. Sugestões são bem-vindas.