窗口函数-排序函数
1 RANK() OVER (ORDER BY …):并列情况序号不连续
SELECT
name,
platform,
editor_rating,
RANK() OVER(ORDER BY editor_rating) as rank_
FROM game;
2 DENSE_RANK() OVER (ORDER BY …):返回’连续’序号
SELECT
name,
platform,
editor_rating,
DENSE_RANK() OVER(ORDER BY editor_rating) as rank_
FROM game;
3 ROW_NUMBER() OVER (ORDER BY …):返回连续唯一的行号
SELECT
name,
platform,
editor_rating,
ROW_NUMBER() OVER(ORDER BY editor_rating) `row_number`
FROM game;
4 rank(),dense_rank(),row_number()的区别,比较,图示
栗子
对比 RANK() , DENSE_RANK() , ROW_NUMBER() 之间的区别,对上面
的案例同时使用三个函数
查询结果
SELECT
name,
genre,
released,
RANK() OVER(ORDER BY released) as rank_num,
DENSE_RANK() OVER(ORDER BY released) as dense_rank_num,
ROW_NUMBER() OVER(ORDER BY released) as row_num
FROM game;
结果:
- RANK() – 返回排序后的序号 rank ,有并列的情况出现时序号不连
续 - DENSE_RANK() – 返回 ‘连续’ 序号
- ROW_NUMBER() – 返回连续唯一的行号,与排序 ORDER BY 配合返
回的是连续不重复的序号
5 NTILE(X) OVER (ORDER BY …):将数据分组,并为每组添加一个相同的序号
将所有的游戏按照安装包大小分成4组,返回游戏名字,类别,安装包
大小,和分组序号
查询结果
SELECT
name,
genre,
size,
NTILE(4) OVER (ORDER BY size DESC) `ntile`
FROM game;
输出:
小结
- 最基本的排序函数: RANK() OVER(ORDER BY column1,
column2…) . - 通过排序获取序号的函数介绍了如下三个:
1 RANK() – 返回排序后的序号 rank ,有并列的情况出现时序号不连
续
2 DENSE_RANK() – 返回 ‘连续’ 序号
3 ROW_NUMBER() – 返回连续唯一的行号,与排序 ORDER BY 配合返
回的是连续不重复的序号 - NTILE(x) – 将数据分组,并为每组添加一个相同的序号