RANK()在分区通过在MySQLRANK()在分区通过在MySQL(Rank() over Par

2019-05-12 10:59发布

我彻底难倒创建从排名在mysql中(通过X分区,以便用y递减)的新栏目“LoginRank”()。

从SQL Server我会写下面的查询,以创建由“登录”分组和“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修复到我的数据集,但仍然遇到问题。

任何帮助是极大的赞赏。 谢谢!

Answer 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;

希望它可以帮助你!



Answer 2:

Mysql的8.0后,您可以使用排名功能

 RANK() OVER (
    ORDER BY column_name
) my_rank

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

这里是使用



文章来源: Rank() over Partition by in mysql