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;
结果:
[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;
结果:
[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;
结果:
[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;
结果:
下一篇维度模型数据仓库(一) —— 概述
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_id | cnt | rank | dummy |
107 | 42 | 1 | 42 |
102 | 41 | 2 | 41 |
198 | 40 | 3 | 40 |
181 | 39 | 4 | 39 |
23 | 37 | 5 | 37 |
81 | 36 | 6 | 36 |
106 | 35 | 7 | 35 |
158 | 35 | 7 | 35 |
13 | 35 | 7 | 35 |
37 | 35 | 7 | 35 |
[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_id | cnt | rank |
107 | 42 | 1 |
102 | 41 | 2 |
198 | 40 | 3 |
181 | 39 | 4 |
23 | 37 | 5 |
81 | 36 | 6 |
158 | 35 | 7 |
13 | 35 | 7 |
37 | 35 | 7 |
144 | 35 | 7 |
[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_id | cnt | rank |
107 | 42 | 1 |
102 | 41 | 2 |
198 | 40 | 3 |
181 | 39 | 4 |
23 | 37 | 5 |
81 | 36 | 6 |
158 | 35 | 7 |
13 | 35 | 8 |
37 | 35 | 9 |
144 | 35 | 10 |
[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_id | first_name | rownum |
132 | ADAM | 1 |
71 | ADAM | 2 |
165 | AL | 3 |
173 | ALAN | 4 |
146 | ALBERT | 5 |
下一篇维度模型数据仓库(一) —— 概述
相关文章推荐
- Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
- Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
- mysql记录集中记录序号,MySQL中实现rownum功能类似的语句
- 对字符串的“sum”——Oracle里实现类似MySQL group_concat函数
- MySQL实现类似Oracle的序列 - sequence
- 在MySQL中实现插入或更新操作(类似Oracle的merge语句)
- MySQL实现类似Oracle序列的函数
- MySQL实现类似Oracle的序列
- mysql实现类似oracle的connect by功能
- MySQL实现类似Oracle的序列
- mysql中使用tee实现类似oracle spool功能
- mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能
- MySql中实现类似Oracle的Sequence方案
- MySQL中实现rownum功能类似的语句
- Mysql 实现按字段排名(实现oracle的rowNum)
- mysql sqlserver 类似oracle rownum
- mysql中实现类似oracle中的nextval函数
- MySQL实现类似Oracle的序列
- Oracle如何实现类似MySQL的show create table,show index的功能
- MYSQL 存储过程实现类似ORACLE row_number 和 rank 的简单例子