PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :comment SOMMER les attributs, y compris un champ JSONB, et conserver la forme de la table ?

La fonction jsonb_each_text() dans la sous-requête provoque la colonne total_list_size est répliqué autant de fois que le nombre d'éléments dans star_pu , donc avg() affiche un résultat correct.

Pour obtenir un total_list_size pour une date vous pouvez utiliser une sous-requête parallèle qui accumule la valeur indépendamment.

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;