首页 > 解决方案 > 根据折扣查询前 5 名产品和陈列室

问题描述

我有一个表l_sales,它包含 Product_id、陈列室、折扣 列。我只想要基于折扣的前 5 个陈列室,一个陈列室可以销售多种产品,我想要基于折扣的前 5 个陈列室的前 5 种产品。如何实现这一目标?例如:陈列室|Product_id|折扣 A. 肥皂。90 A.笔。60 B.笔。70 C. 铅笔。40 D. 蛋糕。60 E.巧克力。50

结果将是 Showroom|Product_id|Discount A. Soap。90 A.笔。60 B.笔。70 C. 铅笔。40 D. 蛋糕。60 这里我们得到 A 两次,因为它销售两种产品,而且它的折扣必须大于其他产品

标签: sqloracle

解决方案


您可以按如下方式使用分析功能:

SELECT SHOWROOM, Product_id, DISCOUNT 
  FROM (SELECT T.*, 
               ROW_NUMBER() OVER (PARTITION BY SHOWROOM ORDER BY DISCOUNT DESC) AS RN 
          FROM (SELECT T.*, 
                       DENSE_RANK() OVER (ORDER BY S DESC) DR 
                  FROM (SELECT T.*,
                               SUM(DISCOUNT) OVER (PARTITION BY showroom) S
                          FROM l_sales T) T) 
          WHERE DR <= 5)
 WHERE RN <= 5

推荐阅读