sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan summerer man en værdi i et JSONB-array i Postgresql?

Brug funktionen jsonb_array_elements() i en sidesammenføjning i fra-sætningen:

select cname, sum(coalesce(value, '0')::int) as value
from (
    select 
        p06->>'cname' as cname, 
        value->>'progress' as value
    from ryzom_characters
    cross join jsonb_array_elements(p06->'rpjobs')
    where cid = 675010
    ) s
group by cname
order by value desc 
limit 50;

Du kan bruge venstre join i stedet for cross join for at beskytte forespørgslen mod inkonsistente data:

    left join jsonb_array_elements(p06->'rpjobs')
    on jsonb_typeof(p06->'rpjobs') = 'array'
    where p06->'rpjobs' <> 'null'


  1. Mysql-datofunktionen virker ikke for mindre end

  2. Alternativ til at bruge WHERE ... IN (...) til langsomme SQL-forespørgsler

  3. Rethink Flask – En simpel opgaveliste drevet af Flask og RethinkDB

  4. Hvad er den mest elegante måde at gemme tidsstempel med nanosec i postgresql?