【问题标题】:Largest discount grouped by product category按产品类别分组的最大折扣
【发布时间】:2017-01-26 13:30:16
【问题描述】:

我对 SQL 还很陌生。我在 Oracle 12c 中使用 Order Entry 示例模式。我想按产品类别名称在 OE.Product_Information.list_price 中找到最大百分比折扣。

我尝试对类别进行分组,但不知何故,我最终得到了具有不同折扣价格的同一类别的重复项。我知道这可能是由于该类别中的产品。为了进一步区分这些类别,我已经包括了年份。有没有更好的方法来解决这个问题?

这是我目前所拥有的

     SELECT * 
FROM 
    (
      SELECT ROUND(((p.LIST_PRICE-i.UNIT_PRICE)/i.UNIT_PRICE)*100,2)AS LARGEST_DISCOUNT_PERCENT,
        t.CATEGORY_NAME
      FROM OE.PRODUCT_INFORMATION p, 
        OE.CATEGORIES_TAB t, 
        OE.ORDER_ITEMS i
      WHERE t.CATEGORY_ID = p.CATEGORY_ID 
        AND i.PRODUCT_ID = p.PRODUCT_ID 
        AND rownum <=602
      GROUP BY 
        ROUND(((p.LIST_PRICE-i.UNIT_PRICE)/i.UNIT_PRICE)*100,2),
        t.CATEGORY_NAME)
    ORDER BY LARGEST_DISCOUNT_PERCENT DESC ;  

结果: enter image description here

编辑:只是为了进一步澄清这一点-

我正在使用 oracle 12c 示例模式 - 订单输入。此架构中有几个表。对于我要解决的问题,我正在使用下表: - 产品信息 - 类别_标签 - Order_Items

我正在使用的此架构和表的关系图如下所示: Relational Diagram

我想知道是否有办法在不重复的类别中按类别合并最高折扣,从而找到从其标价到其单价提供最大折扣的类别名称。

【问题讨论】:

  • 请与架构分享您的示例输入和输出...
  • 我没有在模式中输入任何内容。订单条目模式是一组可用于 oracle 12c 的示例模式。
  • 如果您可以详细说明您的问题,那么访问此问题的人们会很容易更好地理解。
  • 我添加了关系图并指定了我在架构中使用的表。这有点帮助吗?

标签: sql oracle12c


【解决方案1】:

在下面尝试并检查您是否获得了所需的结果。

PS:由于问题中缺少样本数据,查询未测试:

  SELECT LARGEST_DISCOUNT_PERCENT,
         CATEGORY_NAME,
         rank()over (partition by  CATEGORY_NAME ,LARGEST_DISCOUNT_PERCENT order by LARGEST_DISCOUNT_PERCENT desc) rnk  
    FROM (  SELECT ROUND ( ( (p.LIST_PRICE - i.UNIT_PRICE) / i.UNIT_PRICE) * 100,
                          2)   AS LARGEST_DISCOUNT_PERCENT,
                           t.CATEGORY_NAME CATEGORY_NAME,                            
              FROM OE.PRODUCT_INFORMATION p,
                   OE.CATEGORIES_TAB t,
                   OE.ORDER_ITEMS i
             WHERE     t.CATEGORY_ID = p.CATEGORY_ID
             AND i.PRODUCT_ID = p.PRODUCT_ID
             AND ROWNUM <= 602
            GROUP BY ROUND (
                      ( (p.LIST_PRICE - i.UNIT_PRICE) / i.UNIT_PRICE) * 100,
                      2),
                   t.CATEGORY_NAME)
where rnk = 1;                   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2020-11-05
    • 1970-01-01
    • 2017-09-27
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多