在SQL计算中使用别名

Tom*_*ssi 58 mysql sql database syntax

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

SELECT 10 AS my_num, my_num*5 AS another_number
FROM table
Run Code Online (Sandbox Code Playgroud)

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

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

zes*_*ssx 139

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

SELECT 10 AS my_num, 
       (SELECT my_num) * 5 AS another_number
FROM table
Run Code Online (Sandbox Code Playgroud)

  • 我想知道该功能的记录在哪里.我搜索了整个MySQL文档,但我还没有找到它.我不知道这个"别名重用"是如何工作的,我对可移植性或性能影响感到好奇.如果有人对此有更多了解,我会很感激.谢谢. (16认同)
  • 这是惊人的,应该是公认的答案.非常感谢. (9认同)
  • 没关系,它对我不起作用。我得到了“未知列”。 (2认同)

Rub*_*ias 9

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

SELECT my_num*5 AS another_number FROM
(
    SELECT 10 AS my_num FROM table
) x
Run Code Online (Sandbox Code Playgroud)


Rob*_*Dam 5

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

或者VIEW如果您的公式通常是固定的,您可以使用a

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;
Run Code Online (Sandbox Code Playgroud)

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

或者你可以复制工作:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;
Run Code Online (Sandbox Code Playgroud)

这可能是像php/perl这样的方便:

my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
Run Code Online (Sandbox Code Playgroud)