在SQL计算中使用别名

时间:2010-01-16 13:38:29

标签: mysql sql database syntax

为什么这个查询不起作用?

SELECT 10 AS my_num, my_num*5 AS another_number
FROM table

在这个例子中,我试图在其他计算中使用my_num别名。这导致未知列“my_num”

这是我想要做的简化版本,但基本上我想使用别名来进行其他计算。我的计算要复杂得多,这也就是为什么别名它的好处,因为我用不同的方式重复了几次。

4 个答案:

答案 0 :(得分:130)

只需使用(SELECT alias)包装重复使用的别名:

SELECT 10 AS my_num, 
       (SELECT my_num) * 5 AS another_number
FROM table

答案 1 :(得分:10)

您需要使用子选择以这种方式使用该别名

SELECT my_num*5 AS another_number FROM
(
    SELECT 10 AS my_num FROM table
) x

答案 2 :(得分:5)

sql中的别名与编程语言中的变量不同。别名只能在某些点再次引用(特别是在GROUP BYHAVING子句中)。但是你不能在SELECT子句中重用别名。因此,您可以使用派生查询(例如Rubens Farias建议的),它允许您基本上重命名列和/或命名任何计算列。

如果你的公式通常是固定的,你可以使用VIEW

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;

我相信这会比使用派生查询稍快一些,但它可能在很大程度上取决于您的真实查询。

或者你可以复制这项工作:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;

在php / perl中可能会很方便:

my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";

答案 3 :(得分:0)

``另一种选择是使用APPLY运算符

SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY 
(SELECT 5 AS my_num) X