我正在嘗試在 Postgres 中運行一個結構類似于以下內容的查詢,但是我遇到了列 sum() 的問題。查詢無法識別價格別名。我如何實作這一目標?
select col1,
i2f(....) as col2,
(select ..... limit 1) as PRICE,
sum(PRICE 1)
from tbl1 a
where a.".." = 1;
錯誤:
ERROR: column "price" does not exist
LINE 4: sum(PRICE 1)
uj5u.com熱心網友回復:
您不能在子查詢、group by 或 where 子句條件中使用列別名。
您應該使用WITH(Common Table Expressions) 或使用 join 命令來連接表并使用別名。
with price as (
select ..... limit 1
)
select col1,
i2f(....) as col2,
sum((select * from price) 1)
from tbl1 a
where a.".." = 1;
uj5u.com熱心網友回復:
注意:您提出的問題并不是 SQL 中唯一重要的問題。
您也有一個一般的聚合/GROUP BY 問題,其中一些 SELECT 串列運算式在存在聚合函式的情況下在功能上不依賴于GROUP BY術語。那可以使用單獨的問題和答案。
我將在這里僅解決您的具體問題。
基本上,你問的一個術語<query expression>叫<query specification>,它具有以下一般形式:
<query specification> ::=
SELECT [ <set quantifier> ] <select list> <table expression>
<select list>其中包含您的,其中包含<value expression>s. 這些<value expression>s可能指的是相應的列<table expression>,其中不包括任何<derived column>s相同的列<select list>。
(select ..... limit 1) as PRICEis a <derived column>in your <select list>,這意味著sum(PRICE 1)不能參考 this PRICE。
您可以執行一些操作來允許訪問PRICE. 它們主要涉及:
- 在相應的范圍內推導 PRICE
<table expression>
這可以包含在 a<derived table>或 a<table reference>中的<with list element>a 中<with clause>。
派生表形式:
SELECT ..., sum(PRICE 1)
FROM (
SELECT ..., expression AS PRICE
FROM ...
) AS tname
...
或者
WITH子句形式:
WITH tname AS (
SELECT ..., expression AS PRICE
FROM ...
)
SELECT ..., sum(PRICE 1)
FROM tname
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399530.html
標籤:sql PostgreSQL的 列别名
上一篇:將AutoIncrement設定為false的原始查詢?
下一篇:從表列評估比較運算子
