如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号 ISO SQL: 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数 Oracle 中可以使用标准方法( i版本以上) 也可以使用非标准的 ROWNUM MS SQL Server 则在 版本中提供了 预定义用户变量来实现
创新互联专注于企业成都全网营销推广、网站重做改版、鱼峰网站定制设计、自适应品牌网站建设、H5页面制作、购物商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为鱼峰等各大城市提供网站开发制作服务。
set @mycnt = ;select (@mycnt := @mycnt + ) as ROWNUM othercol from tblname order by othercol;
这样查询出来的结果集中 ROWNUM 就保存了行编号信息 这个行编号信息的某种用途在于当你需要根据需要对数据按照某种规则排序并取出排序之后的某一行数据 并且希望知道这行数据在之前排序中的位置时就用得着了 比如
set @mycnt = ;select * from ( select (@mycnt := @mycnt + ) as ROWNUM othercol from tblname order by othercol) as A where othercol=OneKeyID;
lishixinzhi/Article/program/MySQL/201405/30871
看你的意思行号就是显示顺序号,你的查询结果可以按id升序排序(order by id),这样查询结果的顺序就是显示的顺序,这个行号可以在程序里加上,不用在数据库操作。另外最好是加上一个排序值得字段,这样可以随时调整显示顺序。
Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL Server 则在 2005 版本中提供了 ROW_NUMBER() 函数;但在 MySQL 中似乎还没有这样的系统自带功能。
解决方法是通过预定义用户变量来实现: mysql set @mycnt = 0; mysql select (@mycnt := @mycnt + 1) as ROWNUM ,NAME fromCHARBASE LIMIT 100; 这样查询出来的结果集中 ROWNUM 就保存了行编号信息。这个行编号信息的某种用途在于当你需要根据需要对数据按照某种规则排序并取出排序之后的某一行数据,并且希望知道这行数据在之前排序中的位置时就用得着了。
为每一行记录添加行号
方法一:为了实现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
根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……