【问题标题】:SQL Analytic Functions: Rank over Multiple PartitionsSQL 分析函数:对多个分区进行排名
【发布时间】: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。谢谢

标签: sql rank analytic-functions


【解决方案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 只是该行的另一列。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多