首页 > 解决方案 > SQL 使用中间结果

问题描述

我有一列包含数字(浮点数),我想将其分类并存储为整数和标签(字符串)。现在假设类别仅由 FLOOR(x) 定义。

这有效:

SELECT salary,
  FLOOR(salary) AS category_integer,
  CASE WHEN FLOOR(salary) = 0
    THEN 'foo'
    ELSE 'bar'
  END AS category_label
FROM test01

但我想知道是否可以在后面的部分中使用在查询开头定义的中间变量“category_integer”,如下所示:

SELECT salary,
  FLOOR(salary) AS category_integer,
  CASE WHEN category_integer = 0
    THEN 'foo'
    ELSE 'bar'
  END AS category_label
FROM test01

但这显然不是 SQL 的工作方式。我查看了 Common table Expressions 但在那里迷路了。有没有办法在 SQL 表达式中重用中间变量?

SQL小提琴

我一定错过了这个,但到目前为止我找不到相关的问题。

标签: sqlpostgresql

解决方案


您可能会求助于公用表表达式 - 基本上是一个生成标记结果集的查询,您可以在后续查询中引用。

适应你的例子:

with cte as (
    select salary
         , floor(salary) as category_integer 
      from test01
)
SELECT salary
     , category_integer
     , CASE WHEN category_integer = 0
          THEN 'foo'
          ELSE 'bar'
       END AS category_label
 FROM cte
    ;

有关更多详细信息,请参阅参考:CTE / WITHin pgSQL 9.6

SQL fiddle中查看它。


推荐阅读