【问题标题】:Creating duplicate rankings with window function in mysql在mysql中使用窗口函数创建重复排名
【发布时间】:2021-04-08 17:31:55
【问题描述】:

我有一张如下表:

product country group value
p1 c1 g1 5
p1 c1 g2 6
p1 c2 g1 3
p1 c2 g2 22
p1 c3 g1 1
p1 c3 g2 6

我想考虑每个产品国家组合的价值列中的总和来对它们进行排名。所以在这种情况下,更新后的表应该是这样的:

product country group value rank
p1 c1 g1 5 2
p1 c1 g2 6 2
p1 c2 g1 3 1
p1 c2 g2 22 1
p1 c3 g1 1 3
p1 c3 g2 6 3

p1-c1 组合将具有第二个种子,因为 value 列中的 5+6 高于 7 (1+6) 且低于 25 (22+3)。我使用了dense_rank() over (partition by product, country order by value),但它没有用。如何使用mysql创建上述排名?

谢谢,

【问题讨论】:

    标签: mysql window-functions


    【解决方案1】:

    首先在子查询中使用SUM()窗口函数获取每个产品、国家组合的总值,然后DENSE_RANK()对总值进行排名:

    select product, country, `group`, value,
           dense_rank() over (order by total desc) rnk  
    from (
      select *, sum(value) over (partition by product, country) total
      from tablename
    ) t
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2016-10-29
      • 2019-12-23
      相关资源
      最近更新 更多