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 分析函数:对多个分区进行排名的主要内容,如果未能解决你的问题,请参考以下文章

Hive 窗口与分析型函数

SQL分析函数

SQL Server 2008 中用户定义的排名/分析函数

如何在 Azure 流分析中通过 IotHub.ConnectionDeviceId 对延迟函数进行分区?

oracle 分析函数3

SQL分区和分析函数的使用