在oracle等数据库中,可以轻松使用row_number函数将组中的特定数据分组。 但是,MySQL中没有引入类似的函数。 为了实现这个功能,需要特别的处理。 以下是row_number函数在MySQL中的实现: 实现方法基于英语资料,本文借用了该方法
源地址
row_number函数
函数在组中对分组的数据进行编号,具有以下效果:
按年龄分组编号
添加了新的num列,使您可以与组中的排序配合使用,轻松选择组中的特定数据。
MySQL中使用的知识
case语句
用户变量
实现步骤
实现在每行中添加序列号
SET @row_number=0;
选择
(@row_number:=@row_number 1) AS num,s.id,s.name,s.age
来自
student s;
添加序列号
在此利用用户变量实现数据的自我增加
分组号码
SET @row_number=0,@customer_no=0;
选择
@row_number:=CASE
when @ customer _ no=s.age then @ row _ number 1
ELSE 1
END AS num,
@ customer _ no :=s.ageas stu _ age,
s.id,
s.name
来自
student s
订单依据
s.age;
按年龄分组的编号
customer_no是临时变量,按查询分配给age。 case中的判断条件是在customer_no赋值之前,实际判断当前行的age值是否与前一行的age值相同。 在不同的情况下通过重新编号(输出1 ),实现了按照分组顺序编号的功能。 效果与oracle的row_number函数相同。
用户变量分配的技巧
可以用其他方法替换用户变量的赋值
选择
@row_number:=CASE
when @ customer _ no=s.age then @ row _ number 1
ELSE 1
END AS num,
@ customer _ no :=s.ageas stu _ age,
s.id,
s.name
来自
student s,(SELECT @row_number:=0,@customer_no:=0) AS t
订单依据
s.age;
现在,即使将赋值放在select语句内部,效果也是一样的。