使用 table 中的列在 PostgreSQL 中创建视图

Creating a view in PostgreSQL using columns in a table

在 PostgreSQL 中,我有以下名为 cap_output 的 table 三列:

 case_id  | libcap | libcap_android | 
----------+--------+-----------------
 06112301 |   72.6 |           75.6 |

现在我想根据 cap_output table 中的第 2 和第 3 列创建一个视图。该视图将包含三列。第二列 diff 将是 libcaplibcap_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 列中 return FALSE (f)。但它 returned TRUE (t)。那么为什么我会得到错误的结果?

这表明 cap_output 有一个名为 diff 的列。正如 Marc 指出的那样,该视图否则会出现语法错误。

所以,重复一下逻辑:

CREATE VIEW score_diff AS 
    SELECT c.case_id, 
           (c.libcap - c.libcap_android) AS diff, 
           (CASE WHEN abs(c.libcap - c.libcap_android) < 0.5 THEN TRUE ELSE FALSE END) AS pass
    FROM cap_output AS c;

您不能在 select 列表中使用 diff。此外,case 不是必需的。试试这个:

CREATE VIEW score_diff AS 
    SELECT c.case_id, 
    c.libcap - c.libcap_android AS diff, 
    abs(c.libcap - c.libcap_android) < 0.5 AS pass
    FROM cap_output AS c;