可以在WHERE中使用CASE吗?

yur*_*y-n 2 sql postgresql

试着这样做:

SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table WHERE case_field >= 9000
Run Code Online (Sandbox Code Playgroud)

并收到case_field不存在的错误.

是否可以在不重复CASE的情况下执行此操作?

Mar*_*ith 7

看起来PostgresSQL支持派生表

SELECT * FROM 
(
SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table 
) AS derived
WHERE case_field >= 9000
Run Code Online (Sandbox Code Playgroud)

您可能希望检查它对执行计划没有任何不利影响.