我正在尝试选择一组列表并以重新编号的方式获取结果。
例如
说我选择name ='bob',因此得到其ID号4,5,7
现在我希望结果是
依次按1、2、3 ...
代替4、5、7 ...
因为它是鲍勃的第一个第二个和第三个,依此类推...
最简单的方法是什么?
答案 0 :(得分:0)
这里mysql变量可以完成工作。声明并初始化变量@a = 0
,分配一个递增的值,然后在查询中进行选择。查询应如下所示:
SET @a = 0;
SELECT @a := @a + 1 AS id, name FROM table_name WHERE name = 'bob';
SET @a = 0;
最后,再次设置@a = 0
的值。
答案 1 :(得分:0)
如果使用的是Mysql 8,则可以使用窗口函数rank()
和common table expression
with ordered_data as (
select *,
rank() over (partition by name order by id asc ) rnk
from your_table
order by rnk
)
select * from ordered_data where name = 'bob';
或者,如果您使用的是旧版本,则可以使用相关查询来获取排名
select a.id,a.name,
(select count(*)
from your_table
where name= a.name
and id <= a.id) rnk
from your_table a
where a.name = 'bob'
order by a.id;