123

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

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

5 に答える 5

237
于 2008-10-14T06:52:00.693 に答える
33

これがmysqlで機能するかどうかはわかりませんが、sqlserverを使用すると、次のようにラップすることもできます:

select * from (
  -- your original query
  select .. sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating 
  from ...) Foo
where Foo.avg_rating ...
于 2008-10-14T07:08:27.743 に答える
8

この質問はかなり古く、1 つの回答がすでに 160 票を獲得しています...

それでも私はこれを明確にします: 問題は、実際にはエイリアス名を句で使用できるかどうかではありません。WHERE

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

集計です。このWHERE句では、テーブルの値を見て、テーブルから必要なレコードを制限します。sum(reviews.rev_rating)count(reviews.rev_id)は、レコードで見つかった値ではありません。これらは、レコードを集計した後にのみ取得する値です。

不適切WHEREです。HAVING集計後に結果行を制限したいので、が必要です。ありえない

WHERE avg_rating > 10

または

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

したがって。

HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10

一方、可能であり、SQL 標準に準拠しています。一方

HAVING avg_rating > 10

MySQL でのみ可能です。SELECT句はの後に実行されることになっているため、標準によれば、これは有効な SQL ではありませんHAVING。MySQL ドキュメントから:

標準 SQL に対する別の MySQL 拡張機能では、HAVING 句で選択リスト内のエイリアスされた式を参照できます。

MySQL 拡張機能では、集計列の HAVING 句でエイリアスを使用できます。

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

于 2017-07-10T14:35:41.807 に答える
0

クエリが静的である場合は、それをビューとして定義し、ビューのクエリ中に where 句でそのエイリアスを使用できます。

于 2014-10-20T21:39:40.530 に答える