在 mysql 中对 Rank() 进行分区
Rank() over Partition by in mysql
我完全无法在 mysql.
中从 rank() over(partition by x, order by y desc) 创建一个新列 "LoginRank"
从 sql 服务器我将编写以下查询,以创建按 "login" 分组并按 "id" 排序的列 "Loginrank"。
select ds.id,
ds.login,
rank() over(partition by ds.login order by ds.id asc) as LoginRank
from tablename.ds
我有以下 table.
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 不支持 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;
希望对您有所帮助!
Mysql8.0后可以使用Rank函数
RANK() OVER (
ORDER BY column_name
) my_rank
RANK() OVER (
PARTITION BY <expression>[{,<expression>...}]
ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)
试试这个:
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
我完全无法在 mysql.
中从 rank() over(partition by x, order by y desc) 创建一个新列 "LoginRank"从 sql 服务器我将编写以下查询,以创建按 "login" 分组并按 "id" 排序的列 "Loginrank"。
select ds.id,
ds.login,
rank() over(partition by ds.login order by ds.id asc) as LoginRank
from tablename.ds
我有以下 table.
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 不支持 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;
希望对您有所帮助!
Mysql8.0后可以使用Rank函数
RANK() OVER (
ORDER BY column_name
) my_rank
RANK() OVER (
PARTITION BY <expression>[{,<expression>...}]
ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)
试试这个:
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