SQLのエイリアスに関して疑問と質問があります。同じクエリでエイリアスを使用したい場合は、それを使用できますか。例:列aとbを持つテーブル名xyzについて考えてみます。
select (a/b) as temp , temp/5 from xyz
これは何らかの方法で可能ですか?
クエリ内の式に識別子を指定し、クエリの他の部分でその識別子を再利用することについて話しているのですか?
これは、私のSQLエクスペリエンスのほぼすべてが制限されているMicrosoft SQLServerでは不可能です。ただし、次のことはできます。
SELECT temp, temp / 5
FROM (
SELECT (a/b) AS temp
FROM xyz
) AS T1
明らかに、その例は特に有用ではありませんが、複数の場所で式を使用している場合は、より有用な場合があります。式が長く、それらをグループ化する場合にも便利です。GROUPBY句では、式を再記述する必要があるためです。
MSSQLでは、クエリではなくテーブルスキーマで指定される計算列を作成するオプションもあります。
Oracle with
ステートメントも使用できます。他のDBでも同様のステートメントを利用できます。これが私たちがOracleに使用しているものです。
with t
as (select a/b as temp
from xyz)
select temp, temp/5
from t
/
WITH
ステートメント は1回だけ評価され、後続のステートメントで使用されるため、これには、特に複数のネストされたクエリを含む複雑なクエリがある場合に、パフォーマンス上の利点があります。
SQL製品がエントリーレベルの標準SQL-92に準拠していると仮定すると、同じSELECT
句では不可能です。
SELECT
句の式(およびそれらの相関名)は、「一度に」存在します。あなたが望んでいるように見える左から右への評価はありません。
ここでの@JoshEinsteinの回答によると、回避策として派生テーブルを使用できます(できれば、「temp」よりも意味のあるモート名を使用し、temp/5
式に名前を付けてください。継承する人を念頭に置いてください。コード)。
投稿したコードはMSAccessデータベースエンジンで機能しますが(2番目の式にExpr1
などの意味のない相関名を割り当てます)、実際のSQL製品ではないことに注意してください。
その可能性は私が推測します:
SELECT (A/B) as temp, (temp/5)
FROM xyz,
(SELECT numerator_field as A, Denominator_field as B FROM xyz),
(SELECT (numerator_field/denominator_field) as temp FROM xyz);
これはAmazonRedshiftで利用できるようになりました
例えば。
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
参照: