【问题标题】:Rank() over Partition by in mysqlRank() 在 mysql 中的分区上
【发布时间】:2017-07-20 03:57:51
【问题描述】:

我完全不知道如何在 mysql 中从 rank() over(partition by x, order by y desc) 创建一个新列“LoginRank”。

我会从 sql server 编写以下查询,以创建一个按“login”分组并按“id”排序的“Loginrank”列。

select ds.id, 
       ds.login, 
       rank() over(partition by ds.login order by ds.id asc) as LoginRank
from tablename.ds

我有下表。

create table ds (id int(11), login int(11))
insert into ds (id, login) 
values  (1,1),
    (2,1),
    (3,1),
    (4,2),
    (5,2),
    (6,6),
    (7,6),
    (8,1)   

我尝试将许多现有的 mysql 修复应用到我的数据集,但仍然存在问题。

非常感谢任何帮助。 谢谢!

【问题讨论】:

    标签: mysql window-functions rank partition-by


    【解决方案1】:

    试试这个查询: - MySql 不支持 Rank() 函数。

    select result.id,result.login,result.rank from (
      SELECT    id,
                  login,
                  IF(login=@last,@curRank:=@curRank,@curRank:=@_sequence) AS rank,
                  @_sequence:=@_sequence+1,
                  @last:=login
        FROM      ds , (SELECT @curRank := 1, @_sequence:=1, @last:=0) r
        ORDER BY  id asc) as result;
    

    希望对你有帮助!

    【讨论】:

    • 谢谢。我利用了您上面的回复,效果很好。
    • 不应该是“支持”吗?
    【解决方案2】:

    Mysql 8.0之后可以使用Rank函数

     RANK() OVER (
        ORDER BY column_name
    ) my_rank
    
    RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
    )
    

    here is the usage

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT a.id, a.login, count(b.id)+1 as loginRank
      FROM ds a left join ds b ON a.id>b.id AND a.login=b.login
      GROUP BY a.id, a.login
      ORDER BY a.login, loginRank
      

      你会得到:

      id | login | loginRank
       1 |   1   |    1
       2 |   1   |    2
       3 |   1   |    3
       8 |   1   |    4
       4 |   2   |    1
       5 |   2   |    2
       6 |   6   |    1
       7 |   6   |    2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        • 2014-12-11
        • 2013-06-28
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多