在mysql中选择增量计数器

时间:2012-11-26 14:18:31

标签: mysql database select counter

这是我的mysql查询

select name from table;

我想沿着名字选择一个增量计数器。如何做到这一点。 所以预期的输出将是

Jay 1
roy 2
ravi 3
ram 4

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将向表中添加一列。