PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Formule multiple sur PostgreSQL

SQLFiddle

select
  2.5*((r-i)/(r+(6*i)-(7.5*n)+1)) as tera,
  (r-(2*i)-n)/(r+(2*i)-n) as tera2
from
  (
  select
    sum(case when wavelength between 340 and 345 then reflectance end) as r,
    sum(case when wavelength between 350 and 355 then reflectance end) as i,
    sum(case when wavelength between 360 and 365 then reflectance end) as n
  from
    test
  ) vars

Pour plusieurs tables, vous pouvez utiliser quelque chose comme :

select
  table_name,
  2.5*((r-i)/(r+(6*i)-(7.5*n)+1)) as tera,
  (r-(2*i)-n)/(r+(2*i)-n) as tera2
from
  (
  select
    table_name,
    sum(case when wavelength between 340 and 345 then reflectance end) as r,
    sum(case when wavelength between 350 and 355 then reflectance end) as i,
    sum(case when wavelength between 360 and 365 then reflectance end) as n
  from
    (
      select 'table 1' as table_name, * from test
      union all
      select 'table 2', * from test
      union all
      select 'table 3', * from test      
      union all
      select 'table 4', * from test  
    ) as all_tables
  group by
    table_name
  ) vars

SQLFiddle

Il vous suffit de modifier les noms de table avec vos noms réels et de répéter union all autant de fois que nécessaire.