2017-04-14 65 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

是的!謝謝!!! –