PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:Wie werden Attribute einschließlich eines JSONB-Felds summiert und die Tabellenform beibehalten?

Die Funktion jsonb_each_text() in der Subquery bewirkt die Spalte total_list_size wird so oft repliziert wie die Anzahl der Artikel in star_pu , also avg() zeigt ein korrektes Ergebnis.

Um eine total_list_size zu erhalten für ein date Sie können eine parallele Unterabfrage verwenden, die den Wert unabhängig akkumuliert.

select *
from (
    select date, json_object_agg(key, val) total_star_pu
    from (
        select date, key, sum(value::numeric) val
        from frontend_practicelist, jsonb_each_text(star_pu)
        group by date, key
        ) s
    group by date
    ) s
    join (
        select date, sum(total_list_size) total_list_size
        from frontend_practicelist
        group by date
        ) t
    using(date)
order by date;