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

Postgres - Beregning af summer baseret på resultatet af summen af ​​en anden kolonne

Jeg har brugt row_count() da fortløbende rækkenumre er nødvendige. Du bør ikke i stedet stole på den primære nøgle, fordi den normalt kan indeholde huller.

with recursive cte as (
    select *, row_number() over (order by id)
    from measurements
),
work_table as (
    select 
        id,
        count as count_sum,
        volume as volume_sum,
        row_number
    from cte
    where row_number = 1
    union all
    select
        c.id,
        case when w.volume_sum >= 100
            then c.count
            else w.count_sum + c.count
        end as count_sum,
        case
            when w.volume_sum >= 100
            then c.volume
            else w.volume_sum + c.volume
        end as discrete_sum_volume,
        c.row_number
    from cte c
    join work_table w
    on c.row_number = w.row_number + 1
)
select count_sum, volume_sum
from work_table
where volume_sum >= 100
or id = (select max(id) from work_table)
order by id
 

Resultat:

count_sum | volume_sum -----------+------------ 87 | 111 49 | 100 2 | 16.5 (3 rows)

SqlFiddle.




  1. Produktionsdatabasen er ikke konfigureret

  2. Hvordan indstiller jeg MySQL midlertidigt til skrivebeskyttet via kommandolinjen?

  3. Indstilling af skemanavnet i postgres ved hjælp af R

  4. ordombrydning lader ikke tallene også ombryde