2017-04-14 11 views
0

SQL PLUS-表示テーブル

SQL> SELECT LGPRODUCT.BRAND_ID, BRAND_NAME, BRAND_TYPE, ROUND(AVG(PROD_PRICE),2) 
FROM BOFF.LGPRODUCT, BOFF.LGBRAND 
WHERE LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
GROUP BY LGPRODUCT.BRAND_ID, BRAND_NAME, BRAND_TYPE 
ORDER BY LGPRODUCT.BRAND_ID; 

が、私はROUND入力した場合(MAX(AVG(PROD_PRICEを))、2)私はエラーを取得し、任意の提案を:入力して、すべてのブランドの価格?

答えて

0

あなたは平均応じてランクをマークして、トップランクの行を取得するためにフィルタリングするウィンドウ関数rankを使用することができます。

select * 
from (
    select lgproduct.brand_id, 
     brand_name, 
     brand_type, 
     round(avg(prod_price), 2), 
     rank() over (
      order by round(avg(prod_price), 2) desc 
      ) as rnk 
    from boff.lgproduct, 
     boff.lgbrand 
    where lgproduct.brand_id = lgbrand.brand_id 
    group by lgproduct.brand_id, 
     brand_name, 
     brand_type 
    ) t 
where rnk = 1 
order by brand_id; 

あなたが試行しhavingを使用する必要がある場合:

select lgproduct.brand_id, 
    brand_name, 
    brand_type, 
    round(avg(prod_price), 2) 
from boff.lgproduct, 
    boff.lgbrand 
where lgproduct.brand_id = lgbrand.brand_id 
group by lgproduct.brand_id, 
    brand_name, 
    brand_type 
having round(avg(prod_price), 2) = (
     select max(round(avg(prod_price), 2)) 
     from boff.lgproduct, 
      boff.lgbrand 
     where lgproduct.brand_id = lgbrand.brand_id 
     group by lgproduct.brand_id, 
      brand_name, 
      brand_type 
     ) 
order by lgproduct.brand_id; 
+0

私は」まだそれほど遠くない。私はHAVINGまたはWHERE/ANDを使用しているはずです –

+0

@DanMartos - ソリューションベースの解決策を更新しました。しかし、ウィンドウ関数を実際に見てください。彼らは本当に便利です。 – GurV

+0

はい!ありがとうございました!!! –

関連する問題