无论如何在同一个SELECT子句中使用列别名?例如:
SELECT ord_id, candy_id, price, quantity,
price * quantity AS ext_cost, ext_cost * @tax_rate
Run Code Online (Sandbox Code Playgroud)
返回错误,因为MySQL ext_cost在ext_cost * @tax_rate查询中无法识别" " .如果不可能,可以返回一个包含第一个查询中列出的所有内容的表,而不必写这样的内容吗?
SELECT ord_id, candy_id, price, quantity,
price * quantity AS ext_cost, (price * quantity) * @tax_rate
Run Code Online (Sandbox Code Playgroud)
基本上,我只是想知道无论如何都要ext_cost在SELECT查询中重用.
WiR*_*R3D 19
在 MySQL 中,您可以在同一选择中引用选择列别名,只要它位于引用点之前即可。
SELECT
ord_id,
candy_id,
price,
quantity,
price * quantity AS ext_cost,
(SELECT ext_cost) * @tax_rate as retail_rate
Run Code Online (Sandbox Code Playgroud)
现在如果我知道如何在 postgres 中做到这一点就好了。
没有办法引用别名,但您可以将表达式赋值给变量,然后引用同一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>
Run Code Online (Sandbox Code Playgroud)
您还可以有条件地执行变量赋值.
例如
IF(quantity > 90,
@exc_cost := price * quantity * 0.95
, @exc_cost := price * quantity) AS exc_cost
Run Code Online (Sandbox Code Playgroud)
注1:如果没有聚合度量和group by子句,则根据列顺序评估变量:
SELECT @t, @t+2 FROM (SELECT @t := 1) a
Run Code Online (Sandbox Code Playgroud)
产生输出
@t @t+2
1 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |