【发布时间】:2015-08-10 18:29:44
【问题描述】:
在 PostgreSQL 中,我有一个名为 cap_output 的三列表格:
case_id | libcap | libcap_android |
----------+--------+-----------------
06112301 | 72.6 | 75.6 |
现在我想根据cap_output 表中的第二列和第三列创建一个视图。该视图将包含三列。第二列diff 将是libcap 和libcap_android 之间的差异。如果diff 的绝对值小于0.5,第三列将为TRUE,否则为FALSE。所以我使用下面的语句来创建视图
CREATE VIEW score_diff AS
SELECT c.case_id,
c.libcap - c.libcap_android AS diff,
(CASE WHEN abs(diff) < 0.5 THEN TRUE ELSE FALSE END) AS pass
FROM cap_output AS c;
但是创建这个视图之后,当我查询视图score_diff时,我得到了如下结果
case_id | diff | pass
----------+------+------
06112301 | -3 | t
显然,差异是-3,它应该在视图的pass 列中返回FALSE (f)。但它返回了TRUE (t)。那么为什么我会得到错误的结果呢?
【问题讨论】:
-
一般来说,你不能在定义它的同一个字段列表中使用别名。正如你所写的那样,你的视图定义应该因语法错误而死。
-
@MarcB 我执行了
CREATE查询,但没有任何语法错误消息(第 9.4 页)。那么如何在 Postgres 的pass列中引用第二个diff列?
标签: sql postgresql view