2017-02-11 67 views
0

我一直试图解决这个问题一个小时左右,只是无法弄清楚。请有人指点我正确的方向吗?我正在使用来自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左右一路其中包括每一件单品。

我的问题是:我如何得到它,所以我的百分比数字是两位小数,而不是它被舍入到一个整数?我知道我使用了圆括号,但我只做了它,因为没有它,数字大约是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

非常感谢你!为了澄清,最大声明用于回答问题中最大的折扣部分?而且我不是很了解你怎么只在ORDER BY部分中使用“2”,你能否为我解释一个? –

+0

@KurtLee。 。 。 max()是回答“最大折扣”。 “2”实际上只是一个简写,因为我不想输入“Percent_Discount”。 –