PostgreSQL 查询中正确使用计算列进行计算
在处理 PostgreSQL 中的数据时,通常需要对列进行计算以得出新的信息。为此,PostgreSQL 提供了创建计算列的功能,这些计算列可以用作创建它们的同一查询的一部分。
问题:不正确的 SQL 语法
考虑以下 SQL 语句,它在其他数据库管理系统 (DBMS) 中有效,但在 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, (calculated total_1 + calculated total_2) as total_3 from data;</code>
PostgreSQL 会引发错误,指出列 total_1
和 total_2
不存在。
解决方案:将查询包装在派生表中
为了解决这个问题,PostgreSQL 要求将 SELECT 语句包装在派生表中:
<code class="language-sql">select cost1, quantity_1, cost_2, quantity_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 ) t;</code>
这种方法允许您访问派生表中的列别名,包括计算列 total_1
和 total_2
。它不会造成任何性能损失。
注意事项
值得注意的是,允许直接在后续计算中使用计算列的原始 SQL 语句,在 PostgreSQL 或其他 DBMS 中都不推荐。它可能导致性能问题并阻碍查询优化。
以上是如何在 PostgreSQL 查询中使用计算列正确执行计算?的详细内容。更多信息请关注PHP中文网其他相关文章!