SQL 分析函数:对多个分区进行排名
Posted
技术标签:
【中文标题】SQL 分析函数:对多个分区进行排名【英文标题】:SQL Analytic Functions: Rank over Multiple Partitions 【发布时间】:2017-10-15 22:56:50 【问题描述】:一位朋友就以下查询寻求帮助(请参阅图片以获得更多说明):
“我们需要生成基于售出商品数量的销售排名,并按产品计算。换句话说,对于给定的产品,售出商品数量最多的年份将排名第 1,下一个售出物品数量的年份将排在第 2 位,依此类推”
我给他邮寄了以下 SQL,但是他说所有行都以 1 的排名返回
Select product, year, num_of_items_sold
RANK( ) OVER (PARTITION BY product, year ORDER BY num_of_items_sold) as sales_rank
from prod_sales
我错过了什么吗?谢谢。
【问题讨论】:
使用PARTITION BY product ORDER BY num_of_items_sold desc
您使用的是什么数据库?甲骨文?
postgres。谢谢
【参考方案1】:
鉴于这个问题,窗口函数中不需要year
似乎令人惊讶。它只关心product
和售出的商品数量:
select product, year, num_of_items_sold
rank() over (partition by product
order by num_of_items_sold desc
) as sales_rank
还要注意order by
的降序排列。
【讨论】:
戈登,你是对的。考虑到问题的语言,我设法使自己感到困惑。如果您知道某个来源提供了一个简洁示例,说明 rank 函数被多个分区(超过 1 个字段)分割,请您指导我。非常感谢。 @JohnGagliano 。 . .我认为你只需要练习。窗口函数影响 整个 行,year
只是该行的另一列。以上是关于SQL 分析函数:对多个分区进行排名的主要内容,如果未能解决你的问题,请参考以下文章