这是我的mysql查询
select name from table;
我想沿着名字选择一个增量计数器。如何做到这一点。 所以预期的输出将是
Jay 1
roy 2
ravi 3
ram 4
答案 0 :(得分:88)
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;
例如在存储过程中使用时。
答案 1 :(得分:3)
您也可以使用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
答案 2 :(得分:1)
如果您的查询包含 GROUP BY
语句,则使用交叉连接和逗号的解决方案将不起作用。对于这种情况,您可以使用子选择:
SELECT (@row_number := @row_number + 1) AS rowNumber, res.*
FROM
(
SELECT SUM(r.amount)
FROM Results r
WHERE username = 1
GROUP BY r.amount
) res
CROSS JOIN (SELECT @row_number := 0) AS dummy
答案 3 :(得分:0)
SELECT name,
@rownum := @rownum + 1 as row_number
FROM your_table
,
(select @rownum := 0) r
我更喜欢使用逗号而不是CROSS JOIN
,因为它执行起来更快。使用CROSS JOIN
将向表中添加一列。