![](/img/trans.png)
[英]MySQL Select Statement using the same table and column but different names for an alias
[英]Using Column Alias in Same SELECT Clause
無論如何,是否可以在分配給它的同一個 SELECT 子句中使用列別名? 例如:
SELECT ord_id, candy_id, price, quantity,
price * quantity AS ext_cost, ext_cost * @tax_rate
返回錯誤,因為 MySQL 無法識別ext_cost * @tax_rate
查詢中的“ ext_cost
”。 如果不可能,是否可以返回包含第一個查詢中列出的所有內容的表而不必編寫類似的內容?
SELECT ord_id, candy_id, price, quantity,
price * quantity AS ext_cost, (price * quantity) * @tax_rate
基本上,我只是想知道是否可以在 SELECT 查詢中重用ext_cost
。
不,沒有辦法引用別名,但是您可以將表達式分配給一個變量,然后在同一個 select 子句中引用該變量。
在 select 語句中變量賦值總是由中綴運算符:=
。 *在SET
語句中,它可以是=
或:=
。
例如
SELECT
ord_id
, candy_id
, price
, quantity
, @exc_cost := price * quantity AS exc_cost
, @exc_cost * @tax_rate AS my_favourite_field
...
<FROM CLAUSE>
您還可以有條件地執行變量賦值。
例如
IF(quantity > 90,
@exc_cost := price * quantity * 0.95
, @exc_cost := price * quantity) AS exc_cost
注 1:在沒有聚合度量和 group by 子句的情況下,根據列順序評估變量:
SELECT @t, @t+2 FROM (SELECT @t := 1) a
產生輸出
@t @t+2
1 3
使用子查詢
SELECT t1.ord_id, t1.candy_id, t1.price, t1.quantity, t2.ext_cost, t2.ext_cost * @tax_rate
FROM table1 t1
JOIN (SELECT t.ord_id, t.price * t.quantity AS ext_cost FROM table1 t) t2
ON t2.ord_id = t1.ord_id
在 MySQL 中,您可以在同一個選擇中引用選擇列別名,只要它在引用點之前。
SELECT
ord_id,
candy_id,
price,
quantity,
price * quantity AS ext_cost,
(SELECT ext_cost) * @tax_rate as retail_rate
現在,如果我知道如何在 postgres 中做到這一點就好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.