首页 > 编程知识 正文

mysql查询数据每一行的行号,mysql 型号

时间:2023-05-06 08:02:25 阅读:15176 作者:785

在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语句内部,效果也是一样的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。