2017-07-13 6 views
0

は、ここで元のクエリです:HAVING句を付けずにこのSQLクエリを書き換えますか?

select flavor, max(price) mp 
    from Product 
    where flavor != 'chocolate' 
    group by flavor having avg(price) < 4 
    order by flavor; 

私はHAVING句を使用せずに、このクエリを書き換えを担当しましたが、私はまだこのようなものを学んでいます、と私はこれを正確にアプローチする方法が本当にわかりません。ヒントとして、私はインラインビューを使用するように言われましたが、私は自分のクエリでエラーが発生し続けます。

select flavor, max(price) mp from (select flavor, price, avg(price) ap from Product where flavor != 'chocolate' group by flavor,price) prod where ap < 4 group by flavor order by flavor;

私はまだ私の結果で1つの余分な行を取得:

そして、ここでは、私が書いたクエリです。私の質問について同じではないのですか?

+0

あなたがAVGでMAXを計算する必要があります。現在のように「価格」を選択すると、各商品の味のために効果的にランダムな価格が選択されます。とにかくHAVINGを使うことの問題は何ですか? – Uueerdo

+0

avgを 'where'フィルタに入れてみましたか? –

+0

クラスがサブクエリをよりよく理解し、インライン・ビューを理解するための練習です。私はついにそれを得ました、@トムは正しい考えを持っていました。 – Jordan

答えて

1

は、あなたのようなものを必要とするように思える:

select prod.flavor, prod.MaxPrice 
from (
    select flavor, max(price) AS MaxPrice, avg(price) AS AvgPrice 
    from Product 
    where flavor != 'chocolate' 
    group by flavor) prod 
where prod.AvgPrice < 4 
order by flavor; 
+0

これは完璧でした!ありがとうございました!!! – Jordan

関連する問題