同じSELECT句で列エイリアスを使用する 質問する

同じSELECT句で列エイリアスを使用する 質問する

割り当てられているのと同じ SELECT 句で列エイリアスを使用する方法はありますか? たとえば、次のようになります。

SELECT ord_id, candy_id, price, quantity, 
price * quantity AS ext_cost, ext_cost * @tax_rate

ext_costMySQL はクエリ内の" " を認識しないため、エラーを返しますext_cost * @tax_rate。それが不可能な場合、このようなものを書かずに、最初のクエリにリストされているすべてのものを含むテーブルを返すことは可能ですか?

SELECT ord_id, candy_id, price, quantity, 
price * quantity AS ext_cost, (price * quantity) * @tax_rate

ext_cost基本的に、 SELECT クエリで再利用する方法があるかどうか疑問に思っていました。

ベストアンサー1

いいえ、エイリアスを参照する方法はありませんが、式を変数に割り当て、同じ SELECT 句でその変数を参照することはできます。

SELECT ステートメント内では、変数の割り当ては常に中置演算子 によって行われます:=。 *ステートメント内では、または のSETいずれかになります。=:=

例えば

SELECT 
    ord_id
  , candy_id
  , price
  , quantity
  , @exc_cost := price * quantity AS exc_cost
  , @exc_cost * @tax_rate AS my_favourite_field
...
<FROM CLAUSE>

条件付きで変数の割り当てを実行することもできます。

例えば

IF(quantity > 90, 
     @exc_cost := price * quantity * 0.95
   , @exc_cost := price * quantity) AS exc_cost

注 1: 集計メジャーと group by 句がない場合、変数は列の順序に従って評価されます。

SELECT @t, @t+2 FROM (SELECT @t := 1) a

出力を生成する

@t   @t+2
 1      3

おすすめ記事