表中数据
一、row_number()
(1)row_number() over(order by [列名])
说明:将select查询的数据依次进行排序
SELECT row_number() over(ORDER BY tbl.runoob_id) as num,tbl.* from runoob_tbl tbl;
结果如下图所示:
(2)row_number() over(partition by [列名])
说明:将数据根据[列名]进行分组,然后进行组内排序,组与组之间互不影响。
SELECT row_number() over(PARTITION by tbl.runoob_author) as num,tbl.* from runoob_tbl tbl;
结果如下图所示:
备注:partition by 和 order by 可以联合使用
二、rank()
(1)rank() over(order by [列名])
说明:对数据进行排序,不过如果[列名]存在相同的数据,则它们的排序是一样的,这样后续有可能出现跳跃的序号。
SELECT rank() over(ORDER BY tbl.runoob_author) as num,tbl.* from runoob_tbl tbl;
结果如下图所示:
三、dense_rank()
(1)dense_rank() over(order by [列名])
说明:对数据进行排序,不过如果[列名]存在相同的数据,则它们的排序是一样的,这样后续有可能出现连续的序号。
SELECT dense_rank() over(ORDER BY tbl.runoob_author) as num,tbl.* from runoob_tbl tbl;
结果如下图所示:
四、ntile()
(1)ntile([数字]) over(order by [列名])
说明:将搜索出来的数据装进桶中,具体装进几个桶,需要通过ntile中的数字进行设置。主要用于多线程分批处理数据等情况。
SELECT ntile(2) over (ORDER BY t.runoob_id),t.* FROM runoob_tbl t;
结果如图所示,将结果分为2个桶:
如果文章中有不足的地方,请各位大神批评指正。