web-dev-qa-db-ja.com

SQL計算でのエイリアスの使用

このクエリが機能しないのはなぜですか?

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

この例では、他の計算でmy_numエイリアスを使用しようとしています。これにより、不明な列「my_num」が生成されます

これは私がやろうとしていることの簡易版ですが、基本的にはエイリアスを使用して他の計算を行いたいと思います。私の計算ははるかに複雑であり、それが異なる方法を数回繰り返すので、エイリアスするのはいいことです。

58
Tom Rossi

再利用したエイリアスを(SELECT alias)でラップするだけです:

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

エイリアスをそのように使用するには、副選択を使用する必要があります

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

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";
5
Rob Van Dam

`` 別のオプションはAPPLY演算子を使用することです

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