在 SQL 计算中使用别名

问题描述 投票:0回答:5

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

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

在此示例中,我尝试在其他计算中使用 my_num 别名。这会导致未知列“my_num”

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

mysql sql database syntax
5个回答
195
投票

只需用

(SELECT alias)
包裹您重复使用的别名即可:

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

11
投票

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

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

6
投票

sql 中的别名与编程语言中的变量不同。别名只能在某些点再次引用(特别是在

GROUP BY
HAVING
子句中)。但是您不能在
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";

0
投票

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

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

0
投票

简单易行。您可以使用变量。

SELECT @my_num := 10 AS my_num, @my_num*5 AS another_number;
SHOW WARNINGS;

这将引发警告:“在表达式中设置用户变量已被弃用,并将在将来的版本中删除。考虑替代方案:'SET变量=表达式,...'或'SELECT表达式INTO变量'."

© www.soinside.com 2019 - 2024. All rights reserved.