【问题标题】:Calculating percent discount on Oracle SQL Developer计算 Oracle SQL Developer 的百分比折扣
【发布时间】:2017-02-11 03:19:54
【问题描述】:

我已经尝试了一个小时左右来解决这个问题,但无法弄清楚。有人可以指出我正确的方向吗?我正在使用 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 左右,其中包括每一个产品。

我的问题是:我如何得到它,所以我的百分比数字是小数点后两位而不是四舍五入成整数?我知道我使用了 round 语句,但我这样做只是因为没有它,数字大约是 15 位。 另外,您认为我的代码是否正确回答了问题?我觉得我应该只显示折扣最大的前 10 或 20 个类别名称。无论如何我可以这样做而不是列出所有这些吗?

【问题讨论】:

    标签: sql oracle


    【解决方案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 中的唯一键。

    【讨论】:

    • 再次感谢您!只是为了澄清,max语句用于回答问题的最大百分比折扣部分?我不太明白你为什么只在 ORDER BY 部分中使用“2”,请你为我解释一下吗?
    • @KurtLee。 . . max() 是回答“最大折扣”。 “2”实际上只是一个简写,因为我不想输入Percent_Discount
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多