我一直试图解决这个问题一个小时左右而且只是想不通。愿有人指出我正确的方向吗?我正在处理来自Oracle SQL Developer的OE模式的数据。
我需要显示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
结果实际上一直下降到150左右,包括每一件产品。
我的问题是:我如何得到它所以我的百分比数字是两位小数而不是四舍五入到整数?我理解我使用了圆形声明,但我只是这样做,因为没有它,数字大约是15位数。 另外,您认为我的代码是否正确回答了问题?我觉得我应该只显示最大折扣的前10或20个类别名称。无论如何我可以做到而不是列出所有这些吗?
答案 0 :(得分: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
中唯一的密钥。