我正在尝试做这样的事情。但是我得到一个未知的列错误:
SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
基本上,我想只使用别名,这样我就不需要执行之前执行的操作了。这在mysql中是否可行?
答案 0 :(得分:34)
select @code:= SUM(field1 + field2), @code+1 from abc;
但是,请注意以下内容(来自MySQL 5.6 docs):
作为一般规则,除了在SET语句中,您不应该为用户变量赋值并在同一语句中读取值。例如,要增加变量,这没关系:
SET @a = @a + 1;
对于其他语句,例如SELECT,您可能会得到您期望的结果,但这不能保证。在下面的语句中,您可能会认为MySQL将首先评估@a,然后再进行一次分配:
SELECT @a, @a:=@a+1, ...;
但是,涉及用户变量的表达式的评估顺序是未定义的。
因此,使用风险自负。
答案 1 :(得分:19)
考虑使用子查询,例如:
SELECT col1
, col1 + field3 AS col3
FROM (
SELECT field1 + field2 as col1
, field3
from core
) as SubQueryAlias
答案 2 :(得分:13)
您可以select
别名:
SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core
这很有效。
答案 3 :(得分:4)
根据the spec Ravi Parekh的回答并不能保证始终有效,因为"对涉及用户变量的表达式的评估顺序未定义"。
在我尝试使用变量并得到奇怪的结果后,我找到了this answer。
答案 4 :(得分:3)
select @code:= SUM(field1 + field2), (@code*1) from abc;
@ code * 1转换为数字表达式,您可以使用
之类的任何地方select @code:= SUM(field1 + field2), (@code*1)+field3 from abc;
答案 5 :(得分:2)
简短的回答是否定的:
mysql> select 1 as a, a + 1 as b;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
postgresql# select 1 as a, a + 1 as b;
ERROR: column "a" does not exist
也就是说,一些SQL实现允许在where / group by / having子句中使用别名,例如:
postgresql# select 1 as a group by a; -- 1 row
答案 6 :(得分:0)
如果您将其与聚合函数(分组依据)一起使用,并且对您不起作用,则将计算的列放在正向列引用的末尾。
SELECT FNC2(AF), FNC1(A) AS AF, B, C, FROM Table GROUP BY ...
1st one doesn't work due to forward column referencing. Do this instead
SELECT FNC1(A) AS AF, B, C, FNC2((SELECT AF)) FROM Table GROUP BY ...