1

mysqlでrank() over(partition by x, order by y desc)から新しい列「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 修正をデータセットに適用しようとしましたが、引き続き問題が発生します。

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

9

このクエリを試してください: - 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;

それがあなたを助けることを願っています!

于 2017-07-20T04:13:45.013 に答える