用sql和直接条件求和

时间:2013-11-20 12:57:46

标签: sql postgresql

我想仅在总和高于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;
                          ^

正确的方法是什么?这些似乎都不起作用。

4 个答案:

答案 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

的val

正如@Denis建议,

select val from (select 1+3 as val) as v where val > 2