2016-09-18 14 views
1

私はかなり新しいSQLです。 Oracle 12cでOrder Entryサンプル・スキーマを使用しています。私は、OE.Product_Information.list_priceで製品カテゴリー名別にパーセンテージのディスカウントを検索したいと考えています。商品カテゴリ別にグループ化した最大の割引

私はカテゴリをグループ化しようとしましたが、どういうわけか、同じカテゴリの重複を異なる割引価格で取得することになります。これはカテゴリの商品に起因する可能性があると私は理解しています。カテゴリをさらに区別するために、私は年を含めました。これを解決する良い方法はありますか?

これは私がこれまで

 SELECT * 
FROM 
    (
     SELECT ROUND(((p.LIST_PRICE-i.UNIT_PRICE)/i.UNIT_PRICE)*100,2)AS LARGEST_DISCOUNT_PERCENT, 
     t.CATEGORY_NAME 
     FROM OE.PRODUCT_INFORMATION p, 
     OE.CATEGORIES_TAB t, 
     OE.ORDER_ITEMS i 
     WHERE t.CATEGORY_ID = p.CATEGORY_ID 
     AND i.PRODUCT_ID = p.PRODUCT_ID 
     AND rownum <=602 
     GROUP BY 
     ROUND(((p.LIST_PRICE-i.UNIT_PRICE)/i.UNIT_PRICE)*100,2), 
     t.CATEGORY_NAME) 
    ORDER BY LARGEST_DISCOUNT_PERCENT DESC ; 

結果持っているものです。 enter image description here

編集:少しだけ、さらにこれを明確にする - 私は、Oracle 12cのサンプル・スキーマを使用してい

を - 注文エントリ。このスキーマにはいくつかの表があります。 Relational Diagram: - PRODUCT_INFORMATION - - Categories_Tab ORDER_ITEMS

私はこのようなルックスで働いている、このスキーマとテーブルのための関係図 :私が解決しようとしている何のために、私は次の表を使用しています

カテゴリーが繰り返されないカテゴリー別に最高の割引を統合する方法があるかどうかを知りたかったので、そのリストの価格から単価に最大の割引をもたらすカテゴリー名を見つけました。

+0

Plsのは、スキーマを使用してサンプル入力と出力を共有... – Teja

+0

私はスキーマへの入力は何もしませんでした。注文入力スキーマは、Oracle 12cで使用可能な一連のサンプル・スキーマです。 – purpletoedpython

+0

あなたがあなたの質問を精緻化することができれば、この質問に訪れる人々のための理解を得るのは簡単でしょう。 – Teja

答えて

0

下記を試して、希望する結果が得られているかどうかを確認してください。

PS:クエリによる問題のサンプルデータの不足のためにテストされていません。

SELECT LARGEST_DISCOUNT_PERCENT, 
     CATEGORY_NAME, 
     rank()over (partition by CATEGORY_NAME ,LARGEST_DISCOUNT_PERCENT order by LARGEST_DISCOUNT_PERCENT desc) rnk 
    FROM ( SELECT ROUND (((p.LIST_PRICE - i.UNIT_PRICE)/i.UNIT_PRICE) * 100, 
          2) AS LARGEST_DISCOUNT_PERCENT, 
          t.CATEGORY_NAME CATEGORY_NAME,        
       FROM OE.PRODUCT_INFORMATION p, 
        OE.CATEGORIES_TAB t, 
        OE.ORDER_ITEMS i 
      WHERE  t.CATEGORY_ID = p.CATEGORY_ID 
      AND i.PRODUCT_ID = p.PRODUCT_ID 
      AND ROWNUM <= 602 
      GROUP BY ROUND (
         ((p.LIST_PRICE - i.UNIT_PRICE)/i.UNIT_PRICE) * 100, 
         2), 
        t.CATEGORY_NAME) 
where rnk = 1;     
関連する問題