2017-02-11 27 views
0

iveこの問題を1時間程度解決するために試してきました。誰かが正しい方向に私を向けることができますか? Oracle SQL DeveloperのOEスキーマのデータを使用して作業しています。Oracle SQL Developerのパーセント割引の計算

私は、list_priceから最大の%割引を控除した商品の商品カテゴリ名を表示する必要があります。

これは私のコードです:

SELECT ct.category_name, ROUND((pi.list_price pi.min_price)*100/pi.list_Price) AS Percent_Discount 
FROM  oe.product_information pi JOIN oe.categories_tab ct ON pi.category_id = ct.category_id 
GROUP BY ct.category_name, ROUND((pi.list_price-pi.min_price)*100/pi.list_Price) 
ORDER BY ROUND((pi.list_price-pi.min_price)*100/pi.list_Price) desc; 

Here is an image of my results of the query

結果は、実際にすべての方法ダウンひとつひとつの製品が含まれて150ishかそこらに行きます。

私の質問は、私のパーセント値が整数に丸められるのではなく、小数点以下2桁になるようにするにはどうすればよいですか?私はラウンドステートメントを使用したことを理解しますが、それがなければ数字は約15桁です。 また、私のコードが問題に正しく答えると思いますか?最大の割引を使ってトップ10または20のカテゴリ名のみを表示する必要があるような気がします。とにかく、それらのすべてをリストするのではなく、私がそれを行うことができるのですか?

答えて

1

ROUND()は、2番目の引数をとります。これは小数点以下桁数です(here参照)。だから、:

SELECT ct.category_name, 
     MAX(ROUND((pi.list_price - pi.min_price)*100/pi.list_Price, 2)) AS Percent_Discount 
FROM oe.product_information pi JOIN 
    oe.categories_tab ct 
    ON pi.category_id = ct.category_id 
GROUP BY ct.category_name 
ORDER BY 2 desc; 

注:あなたは、カテゴリごとに1つの行をしたい場合は、category_nameGROUP BYで唯一の鍵でなければなりません。

+0

ありがとう、もう一度!明確にするために、maxステートメントは質問の最大の割引率部分に答えるために使用されますか?そして、どのようにORDER BYの部分に "2"しか使わなかったのかをよく理解していないのですが、私にそのことを説明してもらえますか? –

+0

@KurtLee 。 。 'max()'は "最大%割引"に答えます。私が 'Percent_Discount'をタイプしたくないので、実際には" 2 "は省略形です。 –