iJa*_*ade 33 mysql database select counter
这是我的mysql查询
select name from table;
Run Code Online (Sandbox Code Playgroud)
我想沿着名字选择一个增量计数器.如何做到这一点.所以预期的产量将是
Jay 1
roy 2
ravi 3
ram 4
Run Code Online (Sandbox Code Playgroud)
jue*_*n d 97
select name,
@rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name
Run Code Online (Sandbox Code Playgroud)
这部分:
cross join (select @rownum := 0) r
Run Code Online (Sandbox Code Playgroud)
可以在不需要单独查询的情况下引入变量.所以第一个查询也可以分解为两个查询,如下所示:
set @rownum := 0;
select name,
@rownum := @rownum + 1 as row_number
from your_table
order by name;
Run Code Online (Sandbox Code Playgroud)
例如,在存储过程中使用时.
小智 14
在 MySQL 8 及更高版本中,您还可以使用 ROW_NUMBER()Window 函数。
SELECT
name,
ROW_NUMBER() OVER ()
FROM table
Run Code Online (Sandbox Code Playgroud)
结果:
Jay 1
roy 2
ravi 3
ram 4
Run Code Online (Sandbox Code Playgroud)
如 juergen d 所示,将 an 放入ORDER BY确定性查询是个好主意。
该ORDER BY可申请查询和独立的计数器。所以:
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name DESC)
FROM table
ORDER BY name
Run Code Online (Sandbox Code Playgroud)
会给你一个降序的计数器。
结果:
Jay 4
ram 3
ravi 2
roy 1
Run Code Online (Sandbox Code Playgroud)
小智 11
SELECT name,
@rownum := @rownum + 1 as row_number
FROM your_table
,
(select @rownum := 0) r
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用逗号而不是CROSS JOIN因为它执行得更快。使用CROSS JOIN将添加一个额外的步骤,即向表中添加一列。
| 归档时间: |
|
| 查看次数: |
54069 次 |
| 最近记录: |