各位用户为了找寻关于MySQL中row_number的实现过程的资料费劲了很多周折。这里教程网为您整理了关于MySQL中row_number的实现过程的相关资料,仅供查阅,以下为您介绍关于MySQL中row_number的实现过程的详细内容
一 、背景
一般在数据仓库环境中,我们可以很方便的使用row_number函数根据某个维度来对数据进行分组,实现每个组内数据编号排序的效果。如下图所示,该图是在mysql环境中生成的效果图,这里以lcid进行的分组,num等价于row_number函数实现的效果:
二、实现过程
1.设置mysql变量
设置两个变量
? 1 2 3set
@row_number:=0;
--根据lcid_no的判断结果生成row_number序号
set
@lcid_no:= 0;
--用于获取每行lcid列数据,然后与前面一行的lcid数据进行对比,若相同则自增1,否则为1
2.使用case when
? 1 2 3 4 5 6 7 8SELECT
@row_number:=
CASE
WHEN
@lcid_no = s.lcid
THEN
@row_number + 1
ELSE
1
END
AS
num,
@lcid_no:=s.lcid
AS
lcid,
s.lcid
FROM
r_qcloud_approval_fh_d s,(
select
@orw_number:=0,@lcid_no:=0) t
ORDER
BY
s.lcid;
3.过程分析 若存在多条相同数据情形 1)初始条件下,游标指向第一条数据,此时lcid_no = 0,lcid_no 不等于lcid,故row_number = 1 2)游标指向第二条数据,lcid_no = 上一条数据的lcid,因上一条数据的lcid = 当前行lcid,因此row_number =2 无重复数据情形 1)初始条件下,游标指向第一条数据,此时lcid_no = 0,lcid_no 不等于lcid,故row_number = 1
三、使用场景
在mysql这种关系型数据库中,没有row_number函数的情况下使用
到此这篇关于MySQL中row_number的实现过程的文章就介绍到这了,更多相关MySQL中row_number内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/ALIVEE/article/details/109030304