你好,下面这个方法你可以试试
用变量累加、插入有自增字段的临时表中、如果有唯一标识的字段,可以用查询解决
select @rd := @rd+1 as rownum, b.id from (select @rd:=0, id from a) b
为每一行记录添加行号
方法一:
为了实现row_number函数功能,此方法我们要使用到会话变量,下面的实例是从 employees 表中选出5名员工,并为每一行添加行号:
1
2
3
4
5
6
set@row_number = 0;
select
(@row_number:=@row_number + 1) asnum, firstname, lastname
from
employees
limit 5;
输出结果:
在这个实例中:
首先,定义变量 @row_number ,并初始化为0;
然后,在查询时我们为 @row_number 变量加1。
方法二:
这种方法仍然要用到变量,与上一种方法不同的是,我们把变量当做派生表,与主业务表关联查询实现row_number函数功能。下面我们仍然以查询5位员工为例:
1
2
3
4
5
select
(@row_number:=@row_number + 1) asnum, firstname, lastname
from
employees,(select@row_number:=0) ast
limit 5;
这样的输出结果与上一种结果是一致的。
需要注意的是,在这种方法中,派生表必须要有别名,否则执行时会出错。
为每一组添加行号
了解oracle的朋友应该知道,row_number函数还有一个非常有用的功能就是分组排序 “over partition by” 。mysql同样可以实现这样的功能,看下面的实例:
首先将payments表中按照客户将记录分组:
1
2
3
4
5
select
customernumber, paymentdate, amount
from
payments
orderbycustomernumber;
输出结果如下:
下面我们需要将每个客户添加一个行号,这里我们需要用到两个变量,一个用于存储行号,一个用于存储客户编号,如:
1
2
3
4
5
6
7
8
9
10
11
select
@row_number := case
when@customer_no = customernumber then@row_number + 1
else1
endasnum,
@customer_no := customernumber asc
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....