sql - 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 表达式中重用中间变量?
我一定错过了这个,但到目前为止我找不到相关的问题。
解决方案
您可能会求助于公用表表达式 - 基本上是一个生成标记结果集的查询,您可以在后续查询中引用。
适应你的例子:
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 / WITH
in pgSQL 9.6。
在SQL fiddle中查看它。
推荐阅读
- android - 房间数据库多对多关系
- php - 在php中经过一段时间后我无法隐藏警报,然后我无法在php中添加onclick函数
- python - 使用 Python 将 YAML 文件转换为 XLSX
- java - 运行我的颤振项目时收到此错误消息
- python - 在 python 链表中实现 __next__()
- python - 在 Heroku Flask 应用程序中将文件上传到 IPFS
- postgresql - postgres:未找到命令,但已满足要求
- security - 如何从管道中的 truffleHog 扫描中排除单个秘密?
- h2 - 为 Corda 节点打开多个 H2 控制台
- r - 基于数据框的其他列的列行连接