sql - 根据折扣查询前 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 两次,因为它销售两种产品,而且它的折扣必须大于其他产品
解决方案
您可以按如下方式使用分析功能:
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
推荐阅读
- javascript - 为什么div文本通过innerHTML用JavaScript调整后会自动恢复原状?
- mysql - MySQL 触发器不起作用
- ruby-on-rails - 工作时无法获得 Ruby
- python - 复杂的 django 查询,包括一对一模型
- python-3.x - 如何使用python通过hdfs3 lib在HDFS上上传本地文件
- spring-data-jpa - 无法使用 Spring data jpa Repositories 和 JtaTransactionManager 在数据库中持久化对象
- arrays - 在多维数组上应用带有条件语句的函数
- postgresql-10 - 如何快速启动逻辑复制?
- python - 图像 Python IO 内存流保存和使用时出错
- python - 大熊猫不修改 df