2017-02-11 2 views
0

ive пытался решить эту проблему в течение часа или около того и просто не мог понять это. Может кто-нибудь указать мне в правильном направлении, пожалуйста? Я работаю с данными из схемы OE с Oracle SQL Developer.Расчет процентной скидки на 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 или около того, который включает в себя каждый отдельном продукт.

Мой вопрос: Как я могу получить его, поэтому мое процентное число составляет два десятичных знака вместо того, чтобы округлить его до целого числа? Я понимаю, что использовал круглый оператор, но я сделал это только потому, что без него цифры составляют около 15 цифр. Также, как вы думаете, мой код правильно отвечает на проблему? Я чувствую, что должен показывать только 10 или 20 наименований категорий с самой большой скидкой. В любом случае, я могу сделать это, а не перечислять их все?

ответ

1

ROUND() принимает второй аргумент, который представляет собой число десятичных знаков, которое вы хотите (см. 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; 

Примечание: Если вы хотите одну строку для каждой категории, то category_name должен быть единственным ключом в GROUP BY.

+0

Еще раз спасибо! Как раз для пояснения, максимальная заявка используется для ответа на самую большую% скидку на вопрос? И я не совсем понимаю, почему вы использовали только «2» в части ORDER BY, не могли бы вы объяснить, что один для меня? –

+0

@KurtLee. , , 'Max()' отвечает на «наибольшую% скидку». «2» на самом деле является просто сокращением, потому что я не хотел набирать 'Percent_Discount'. –

Смежные вопросы