PostgreSQL
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхраняване на срещи в SQL база данни като Postgres за използване с java.time framework

  2. NВлезте в PostgreSQL връзка

  3. connect_by_root еквивалент в postgres

  4. Създаване на релационни връзки в PostgreSQL чрез pgAdmin

  5. Попълване на произволни данни от друга таблица