我完全不知道要创建一个新专栏" LoginRank"来自于mysql的rank()over(x by x,order by y desc)。
从sql server我会编写以下查询,以创建一个列" Loginrank"按"登录"分组并由" id"。
命令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修复程序应用于我的数据集,但仍然存在问题。
非常感谢任何帮助。 谢谢!
答案 0 :(得分:5)
尝试此查询: - 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;
希望它可以帮到你!
答案 1 :(得分: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>...}]
)
答案 2 :(得分:1)
尝试一下:
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