我想仅在总和高于2
时显示该值奇怪的输出
select 1+3 > 2;
?column?
----------
t
(1 register)
ERROR: column "val" does not exist
line 1: select 1+3 as val where val > 2;
^
ERROR: syntax error at or near "CASE"
line 1: select 1+3 as val CASE val > 2;
^
正确的方法是什么?这些似乎都不起作用。
答案 0 :(得分:1)
您需要一个子选择,因为select子句中定义的列不可用于where子句:
select val
from (select 1+3 as val) as vals
where val > 2
CTE也有效:
with vals as (
select 1+3 as val
)
select val
from vals
where val > 2
答案 1 :(得分:1)
你不能在where
条款中使用派生列,关于这个问题有很多关于SO的讨论。一种方法是使用子查询或CTE
select val
from (select 1+3 as val) as v
where val > 2
或
with cte (
select 1+3 as val
)
select val
from cte
where val > 2
答案 2 :(得分:0)
尝试 HAVING 功能。详情请见http://www.w3schools.com/sql/sql_having.asp
答案 3 :(得分:0)
你可以简单地写一下,
选择sum(1 + 3)作为具有和(1 + 3)> 2
正如@Denis建议,
select val from (select 1+3 as val) as v where val > 2