1. ホーム
  2. mysql

[解決済み] mysqlのWHERE句でエイリアスを使用することはできますか?

2022-08-08 06:51:49

質問

WHERE 句でエイリアスを使用する必要がありますが、不明なカラムであると言われ続けています。この問題を回避する方法はありますか?私はxより高い評価を持つレコードを選択する必要があります。評価は次のエイリアスとして計算されます。

sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating

どのように解決するのですか?

HAVING句を使用することができます。 ができます。 はエイリアスを見ることができます、例えば

 HAVING avg_rating>5

という表現になりますが、where節では、例えば、以下のように式を繰り返す必要があります。

 WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5

しかし!すべての式が許されるわけではありません。SUMのような集約関数を使ってもうまくいかないので、その場合はHAVING句を使う必要があります。

から MySQL マニュアル :

<ブロッククオート

WHERE句でカラムのエイリアスを参照することはできません。 カラムのエイリアスを参照することはできません。 というのも、カラムの値がまだ というのも、WHERE句が実行されたときにカラムの値がまだ決定されていないかもしれないからです。 が実行されたときにカラムの値が決定されていない可能性があるためです。参照 B.1.5.4節を参照してください。 "カラム・エイリアスの問題" .