sql >> Databáze >  >> RDS >> PostgreSQL

Funkce PostgreSQL pro iteraci/působení na mnoha řádcích se stavem

No, tohle není moc hezké, ale je to funkční:

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

V PL/pgsql je to ale docela jednoduché:

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 $$;

Tak si asi vyber.



  1. Neplatný relační operátor

  2. Jak odstranit záznamy, které NEJSOU IN

  3. Různé způsoby zobrazení tabulek na serveru MySQL

  4. Existuje nějaký způsob, jak vložit velkou hodnotu do databáze mysql bez změny max_allowed_packet?