PostgreSQL 计算列:限制的解决方法
PostgreSQL 对计算列的处理与其他数据库系统不同。 不支持稍后在同一查询中直接引用计算列。 以下示例演示了此限制,该示例将产生错误:
<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_2, (cost_1 * quantity_1) AS total_1, (cost_2 * quantity_2) AS total_2, (total_1 + total_2) AS total_3 -- Error: total_1 and total_2 are not found FROM data;</code>
出现该错误是因为 PostgreSQL 逐行处理查询; total_1
和 total_2
不可用于同一 SELECT
语句中的后续计算。
解决方案涉及使用子查询(派生表)来封装初始计算。 这允许在外部查询中引用结果:
<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_2, total_1, total_2, total_1 + total_2 AS total_3 FROM ( SELECT cost_1, quantity_1, cost_2, quantity_2, (cost_1 * quantity_1) AS total_1, (cost_2 * quantity_2) AS total_2 FROM data ) AS t;</code>
通过将 total_1
和 total_2
的计算嵌套在内部 SELECT
语句(别名为 t
)中,它们变得可访问并可用于外部 SELECT
语句中的进一步计算。此方法提供了一种实用且高效的方法来处理 PostgreSQL 中的计算列,而不会产生显着的性能开销。
以上是如何在 PostgreSQL 查询中使用计算列而不出错?的详细内容。更多信息请关注PHP中文网其他相关文章!