sql >> データベース >  >> RDS >> PostgreSQL

Postgres-別の列の合計の結果に基づいて合計を計算する

    row_count()を使用しました 連続した行番号が必要なため。通常、主キーにはギャップが含まれている可能性があるため、主キーに依存するべきではありません。

    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
    

    結果:

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

    SqlFiddle。




    1. MySQL c#接続文字列フェイルオーバー

    2. postgresqlスーパーユーザーのパスワードプロンプトはありません

    3. テーブルへの書き込みが別のテーブルのバキュームを防ぐのはなぜですか?

    4. これは正確に何をしますかClass.forName(com.mysql.jdbc.Driver).newInstance();