PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja PostgreSQL do iteracji/działania na wielu wierszach ze stanem

Cóż, to nie jest ładne, ale jest funkcjonalne:

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

W PL/pgsql jest to dość proste:

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

Więc chyba wybierz swój wybór.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Zmodyfikuj właściciela we wszystkich tabelach jednocześnie w PostgreSQL

  2. Zaktualizuj kolumnę tabeli o kolumnę innej tabeli w PostgreSQL

  3. RANGE PRECEDING jest obsługiwany tylko z UNBOUNDED

  4. Jak uniknąć sytuacji wyścigu podczas korzystania z metody find_or_create z DBIx::Class::ResultSet?

  5. Jaki jest najszybszy sposób na odbudowanie statystyk PostgreSQL od zera/zera za pomocą funkcji ANALYZE?