Postgresql: oggetti aggregati in un array (json) (problemi di subquery)


8

Mi dispiace per il titolo vago, ma semplicemente non conosco le parole giuste per descriverlo.

Ho questa query che trasforma un gruppo di colonne in un oggetto che funziona perfettamente:

SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t

Tuttavia, voglio raggruppare gli oggetti che rientrano in una determinata categoria in un array. Questa categoria è definita da una quarta colonna all'interno della mia tabella denominata "cargoProductId". L'array dovrebbe avere il valore di "cargoProductId" come chiave. Così:

"961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ]

Quindi ho avuto difficoltà con questo nelle ultime 1 1/2 ore circa. Non ho davvero idea di come farlo. Questo è quello che ho adesso:

SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

Risposte:


9

Se sei su 9.4 qualcosa del genere potrebbe essere quello che stai cercando:

select json_object(array_agg(id)::text[],array_agg(rw)::text[])
from( select id
           , ( select to_json(array_agg(row_to_json(t)))
               from (select typ,prop from bgb where id=b.id) t ) rw
      from bgb b
      group by id ) z;

Grazie Jack! La formazione saggia ha fatto il trucco! L'unico problema che sto riscontrando è che non fornisce json valido (bene tecnicamente lo fa). C'è questo testo in conversione json in corso come: {"3565": "[{\"type\":ho un apostrofo prima di ogni parentesi e una barra prima di ogni apostrofo. Ho avuto questo prima ed è sempre qualcosa con il tipo di dati. Comunque sia a dire la verità, non capisco perfettamente come funziona la query che hai scritto, e quindi non so davvero dove e come risolverlo.
ervazu,

Questa probabilmente non è la soluzione migliore, ma ho appena usato la funzione di sostituzione per risolvere questo problema. Ancora una volta grazie per il tuo tempo!
ervazu,

1
questo ha funzionato per il mio caso:json_agg(to_json(items.*)) as "items"
ricka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.