Sql 按产品类别分组的最大折扣
我对SQL相当陌生。我正在使用Oracle12c中的订单输入示例模式。我想在OE.Product\U Information.list\U price(按产品类别名称)中查找最大百分比折扣 我试着对这些类别进行分组,但不知怎的,我最终得到了相同类别的副本,并且有不同的折扣价格。我理解这可能是由于该类别中的产品造成的。为了进一步区分这些类别,我将年份包括在内。有没有更好的办法解决这个问题 这就是我目前所拥有的Sql 按产品类别分组的最大折扣,sql,oracle12c,Sql,Oracle12c,我对SQL相当陌生。我正在使用Oracle12c中的订单输入示例模式。我想在OE.Product\U Information.list\U price(按产品类别名称)中查找最大百分比折扣 我试着对这些类别进行分组,但不知怎的,我最终得到了相同类别的副本,并且有不同的折扣价格。我理解这可能是由于该类别中的产品造成的。为了进一步区分这些类别,我将年份包括在内。有没有更好的办法解决这个问题 这就是我目前所拥有的 SELECT * FROM ( SELECT ROUN
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提供的一组示例模式。如果您可以详细说明您的问题,访问此问题的人员将很容易更好地理解。我添加了关系图,并指定了我在模式中使用的表。这会稍微有帮助吗?