2009-07-30 5 views
0

エイリアスされたサブクエリでグループ化して並べ替えることはできますが、where句でエイリアスを使用することはできません。代わりに結合を使用する必要がありますか?MySQL where句とサブクエリとしてのavg()による並べ替え

作品:

SELECT entries.*, 
    (SELECT avg(value) 
    FROM `ratings` 
    WHERE ratings.entry_id = entries.id) as avg_rating 
FROM `entries` 
ORDER BY avg_rating DESC 

は( "where句では、未知の列 'avg_ratingを'")失敗:

SELECT entries.*, 
    (SELECT avg(value) 
    FROM `ratings` 
    WHERE ratings.entry_id = entries.id) as avg_rating 
FROM `entries` 
WHERE avg_rating < '4.5000' ORDER BY avg_rating DESC 

答えて

2
代わりにWHERE

のHAVING句でこれを行うことができるかもしれ

Syntax

3

私はjoinとgroupbyを実行します。たとえば、

SELECT entries.*, AVG(value) 
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id 
GROUP BY entries.* 
HAVING AVG(value) < '4.5000' 
ORDER BY AVG(value) 

ちょうど擬似コード、私はまたあなたが必要とするものに正確にエントリの列を制限することをお勧めします。

次のような別名で逃げることができるかもしれません:

SELECT entries.*, AVG(value) as avg_value 
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id 
GROUP BY entries.* 
HAVING avg_value < '4.5000' 
ORDER BY avg_value 
関連する問題