您的位置:首页 > 数据库 > Oracle

MySQl里类似Oracle rownum的实现

2016-12-28 14:26 465 查看
[sql] view plain copy-- dense rank,写法1  
set @curr_cut:=0, @prev_cnt:=0, @rank:=0;  
select actor_id,   
       @curr_cnt:=cnt as cnt,  
       @rank:=if(@prev_cnt<>@curr_cnt,@rank:=@rank+1,@rank) as rank  
       @prev_cnt:=@curr_cnt as dummy  
from (select actor_id,count(*) as cnt from sakila.film_actor group by actor_id order by cnt desc limit 10) as der;  
结果:

actor_idcntrankdummy
10742142
10241241
19840340
18139439
2337537
8136636
10635735
15835735
1335735
3735735

[sql]
 view plain copy-- dense rank,写法2,不使用dummy列  
set @curr_cnt:=0, @prev_cnt:=0, @rank:=0;  
select actor_id,  
       @curr_cnt:=cnt as cnt,  
       @rank:=if(@prev_cnt<>@curr_cnt,@rank:=@rank+1,@rank) as rank  
from (select actor_id,count(*) as cnt from sakila.film_actor group by actor_id order by cnt desc limit 10) as der  
where least(0,@prev_cnt:=@curr_cnt)=0;  
 结果:

actor_idcntrank
107421
102412
198403
181394
23375
81366
158357
13357
37357
144357

[sql]
 view plain copy-- rank  
set @curr_cnt:=0, @rank:=0;  
select actor_id,@curr_cnt:=cnt as cnt,@rank:=@rank+1 as rank  
from (select actor_id,count(*) as cnt from sakila.film_actor group by actor_id oeder by cnt desc limit 10) as der;  
结果:

actor_idcntrank
107421
102412
198403
181394
23375
81366
158357
13358
37359
1443510

[sql]
 view plain copy-- rownum  
set @rownum:=0;  
select actor_id,first_name,@rownum:=@rownum+1 as rownum from sakila.actor order by first_name limit 5;  
结果:

actor_idfirst_namerownum
132ADAM1
71ADAM2
165AL3
173ALAN4
146ALBERT5

下一篇维度模型数据仓库(一) —— 概述
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: