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

Postgres jak implementovat vypočítaný sloupec s klauzulí

Pokud nechcete výraz opakovat, můžete použít odvozenou tabulku:

select *
from (
   select id, cos(id) + cos(id) as op 
   from myTable 
) as t 
WHERE op > 1;

To nebude mít žádný dopad na výkon, je to pouze syntaktický cukr vyžadovaný standardem SQL.

Alternativně můžete výše uvedené přepsat na běžný tabulkový výraz:

with t as (
  select id, cos(id) + cos(id) as op 
  from myTable 
)
select *
from t 
where op > 1;

Kterému z nich dáte přednost, je do značné míry věcí vkusu. CTE jsou optimalizovány stejným způsobem jako odvozené tabulky, takže první z nich může být rychlejší, zejména pokud existuje index na výrazu cos(id) + cos(id)



  1. Příklad Oracle Dynamic SQL pro vložení záznamu pomocí DBMS_SQL

  2. PDOStatement::rowCount výsledek při použití po PDO::commit?

  3. Nemohu najít nápovědu k 'Oracle SQL Developer' a 'Oracle Database 12c' uvnitř Linuxu

  4. Proč by tento dotaz MySQL pomocí rand() ve třetině případů nevracel žádné výsledky?