sql:对创建的列进行过滤

时间:2018-08-28 00:09:36

标签: sql postgresql

假设我有一个非常简单的sql表:

 id | step
----+------
  1 |    1
  2 |    2
  3 |    3

我试图基于一个简单的操作创建一个新列,并对该新列进行过滤。过滤器之前的新创建的表格应如下所示:

 id | step | new
----+------+-----
  1 |    1 |  10
  2 |    2 |  20
  3 |    3 |  30

我认为以下查询应该有效:

select id, step, step*10 as new from event where new = 20

但是我遇到以下错误:

  

错误:“新”列不存在

2 个答案:

答案 0 :(得分:2)

whereselect之前处理,这就是为什么此时未知计算列new的原因。请改用step*10=20

或者使用子查询并使用别名进行过滤。

select * 
from (select id, step, jsonb_array_elements(payload::jsonb->'sample_id') as new 
      from event 
     ) e
where new = --somevalue

答案 1 :(得分:0)

如果您不喜欢子查询,则可以使用横向联接:

with event as (
      select 1 as id, 2 as step
     )
select e.id, e.step, v.new
from event e cross join lateral
     (values (e.step * 10)) v(new)
where v.new = 20;

当您有多个相互依赖的表达式时,这很方便。除了嵌套子查询或CTE,您还可以将它们添加到FROM子句中。