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中文網其他相關文章!