下面是我的MySQL查询:
SELECT name FROM table;如何在选择name的同时选择递增计数器?预期输出:
Jay 1
roy 2
ravi 3
ram 4发布于 2012-11-26 22:19:14
select name,
@rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name这部分:
cross join (select @rownum := 0) r可以在不需要单独查询的情况下引入变量。因此,第一个查询也可以分解为两个查询,如下所示:
set @rownum := 0;
select name,
@rownum := @rownum + 1 as row_number
from your_table
order by name;例如当在存储过程中使用时。
发布于 2019-04-26 19:03:34
在MySQL 8和更高版本中,您也可以使用ROW_NUMBER() Window function。
SELECT
name,
ROW_NUMBER() OVER ()
FROM table结果:
Jay 1
roy 2
ravi 3
ram 4如juergen d所示,将ORDER BY放入确定性查询是一个好主意。
ORDER BY可以独立地应用于查询和计数器。所以:
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name DESC)
FROM table
ORDER BY name会给你一个递减顺序的计数器。
结果:
Jay 4
ram 3
ravi 2
roy 1发布于 2019-11-23 00:41:53
SELECT name,
@rownum := @rownum + 1 as row_number
FROM your_table
,
(select @rownum := 0) r我更喜欢使用逗号而不是CROSS JOIN,因为它执行起来更快。使用CROSS JOIN将添加一个额外的步骤,即向表中添加一列。
https://stackoverflow.com/questions/13566695
复制相似问题