mysql 怎么才能做到rownumber序号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 怎么才能做到rownumber序号相关的知识,希望对你有一定的参考价值。

参考技术A 为每一行记录添加行号
方法一:
为了实现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

Sqlite 中的 ROWNumber

【中文标题】Sqlite 中的 ROWNumber【英文标题】:ROWNumber in Sqlite 【发布时间】:2012-06-15 00:44:13 【问题描述】:

在 SQL Server2005 中,Row_number() 函数用于检索 结果集的分区内的行的序号,开始 每个分区中的第一行为 1。这在什么时候非常有用 对Table中的大量记录实现分页。有没有 SQLite 中的任何可用函数都与此类似。

【问题讨论】:

【参考方案1】:

没有。通常你会用你自己的代码来处理这些细节。

【讨论】:

【参考方案2】:

您可以使用类似于以下格式的代码来模拟在 ROW_NUMBER() 函数中完成的原始编号。

CREATE TABLE Temp.Output AS
SELECT *
FROM  (
    SELECT 10 AS ID,'Darren' AS Name
    UNION ALL
    SELECT 20,'Roger'
    UNION ALL
    SELECT 30,'Emil'
    UNION ALL
    SELECT 40,'Doug'
    UNION ALL
    SELECT 50,'Martin'
)
ORDER BY Name ASC
;
SELECT ROWID AS ROWNUMBER, ID, Name
FROM Temp.Output
;
DROP TABLE Temp.Output
;

它不支持对结果进行分组的“PARTITION BY”(但你可以使用一些额外的 SQL)。

【讨论】:

以上是关于mysql 怎么才能做到rownumber序号的主要内容,如果未能解决你的问题,请参考以下文章

easyui datagrid页面序号框怎么变宽

Sqlite 中的 ROWNumber

php+mysql 将num1,num2,num3从小到大排序写到num字段里面

php+mysql 将num1,num2,num3从小到大排序写到num字段里面

sql server 2008 用row_number() over()怎么分页?

我需要从转储中恢复数据库,但无法做到