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

状態のある多くの行を反復/処理するPostgreSQL関数

    まあ、これはほとんどきれいではありませんが、機能的です:

    select sum(amt) as session_val
    from (
      select segment,
             max(segment) over() as max_segment,
             amt
      from (
        select sum(case when atype = 'SET' then 1 else 0 end)
                   over(order by "order") as segment,
               amt
        from command
        where session = 2
      ) x
    ) x
    where segment = max_segment
    

    PL / pgsqlでは非常に簡単です:

    create function session_val(session int) returns int stable strict
    language plpgsql as $$
    declare
      value int := 0;
      rec command%rowtype;
    begin
      for rec in select * from command where command.session = session_val.session loop
        if rec.atype = 'SET' then
          value := rec.amt;
        elsif rec.atype = 'ADD' then
          value := value + rec.amt;
        end if;
      end loop;
      return value;
    end $$;
    

    だからあなたの選択をしてください、私は推測します。



    1. UPDATEを使用したexecSQL()は更新されません

    2. 「アプリケーション「SQLDeveloper.app」を開くことができません。」を修正しました。

    3. PostgreSQLでのisnumeric()

    4. 重複を排除するSQLUNIONALL