【转】MySQL实现Oracle里的 rank()over(ORDER BY) 功能
2017-07-25 20:42
661 查看
Oracle
rank()和dense_rank()的区别是:
–rank()是跳跃排序,有两个第二名时接下来就是第四名
–dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
Mysql的做法
例如我有一张表 表名为 A:
ID SCORE
1 28
2 33
3 33
4 89
5 99
6 68
7 68
8 78
9 88
10 90
现在我需要如下结果:
ID SCORE RANK
5 99 1
10 90 2
4 89 3
9 88 4
8 78 5
6 68 6
7 68 7
2 33 8
3 33 9
1 28 10
rank()和dense_rank()的区别是:
–rank()是跳跃排序,有两个第二名时接下来就是第四名
–dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
select sno,cno,score, rank() over(partition by cno order by score desc) "名次" from sc; --名次不跳跃 两个第二名 接下来还是第三名 select sno,cno,score, dense_rank() over(partition by cno order by score desc) "名次" from sc;
Mysql的做法
例如我有一张表 表名为 A:
ID SCORE
1 28
2 33
3 33
4 89
5 99
6 68
7 68
8 78
9 88
10 90
现在我需要如下结果:
ID SCORE RANK
5 99 1
10 90 2
4 89 3
9 88 4
8 78 5
6 68 6
7 68 7
2 33 8
3 33 9
1 28 10
SELECT id, score, rank FROM (SELECT tmp.id, tmp.score, @rank := @rank + 1 AS rank FROM (SELECT id, score FROM a ORDER BY score desc) tmp, (SELECT @rank := 0) a) RESULT;
相关文章推荐
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能优化
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能优化
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- MYSQL-实现分组排序 对比 ORACLE 和SQLserver用 row_number() over(partition by ) 分组排序功能
- mysql实现oracle分析函数功能 over
- mysql实现oracle分析函数功能 over
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能.
- MySQL之实现Oracle中的rank()函数的功能
- mysql--实现oracle的row_number() over功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- mysql--实现oracle的row_number() over功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- 用mysql实现类似于oracle dblink的功能
- MySQL使用递归存储过程实现树状结构,实现Oracle的Connect By 功能在Mysql中如何实现Oracle中的递归
- MYSQL-实现row_number() over(partition by ) 分组排序功能
- mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能