Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按产品类别分组的最大折扣_Sql_Oracle12c - Fatal编程技术网

Sql 按产品类别分组的最大折扣

Sql 按产品类别分组的最大折扣,sql,oracle12c,Sql,Oracle12c,我对SQL相当陌生。我正在使用Oracle12c中的订单输入示例模式。我想在OE.Product\U Information.list\U price(按产品类别名称)中查找最大百分比折扣 我试着对这些类别进行分组,但不知怎的,我最终得到了相同类别的副本,并且有不同的折扣价格。我理解这可能是由于该类别中的产品造成的。为了进一步区分这些类别,我将年份包括在内。有没有更好的办法解决这个问题 这就是我目前所拥有的 SELECT * FROM ( SELECT ROUN

我对SQL相当陌生。我正在使用Oracle12c中的订单输入示例模式。我想在OE.Product\U Information.list\U 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 ;  
结果:

编辑:只是想进一步澄清一下-

我使用的是Oracle12c示例模式-订单条目。此架构中有多个表。对于我试图解决的问题,我使用以下表格: -产品信息 -类别选项卡 -订购商品

我正在使用的这个模式和表的关系图如下所示:


我想知道是否有一种方法可以按类别合并最高折扣,其中类别不会重复,因此可以找到从标价到单价提供最大折扣的类别名称。

请尝试下面的内容,并检查您是否获得了所需的结果

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;                   

尝试下面的方法,并检查您是否得到了期望的结果

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;                   

请与模式共享您的输入和输出示例…我没有在模式中输入任何内容。order entry模式是oracle 12c提供的一组示例模式。如果您可以详细说明您的问题,访问此问题的人员将很容易更好地理解。我添加了关系图,并指定了我在模式中使用的表。这有点帮助吗?请与模式共享您的输入和输出示例…我没有向模式输入任何内容。order entry模式是oracle 12c提供的一组示例模式。如果您可以详细说明您的问题,访问此问题的人员将很容易更好地理解。我添加了关系图,并指定了我在模式中使用的表。这会稍微有帮助吗?