首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL选择递增计数器

MySQL选择递增计数器
EN

Stack Overflow用户
提问于 2012-11-26 22:18:31
回答 4查看 86.9K关注 0票数 47

下面是我的MySQL查询:

代码语言:javascript
复制
SELECT name FROM table;

如何在选择name的同时选择递增计数器?预期输出:

代码语言:javascript
复制
Jay 1
roy 2
ravi 3
ram 4
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-26 22:19:14

代码语言:javascript
复制
select name,
      @rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name

这部分:

代码语言:javascript
复制
cross join (select @rownum := 0) r

可以在不需要单独查询的情况下引入变量。因此,第一个查询也可以分解为两个查询,如下所示:

代码语言:javascript
复制
set @rownum := 0;

select name,
      @rownum := @rownum + 1 as row_number
from your_table
order by name;

例如当在存储过程中使用时。

票数 122
EN

Stack Overflow用户

发布于 2019-04-26 19:03:34

在MySQL 8和更高版本中,您也可以使用ROW_NUMBER() Window function

代码语言:javascript
复制
SELECT
    name,
    ROW_NUMBER() OVER ()
FROM table

结果:

代码语言:javascript
复制
Jay  1
roy  2
ravi 3
ram  4

如juergen d所示,将ORDER BY放入确定性查询是一个好主意。

ORDER BY可以独立地应用于查询和计数器。所以:

代码语言:javascript
复制
SELECT
    name,
    ROW_NUMBER() OVER (ORDER BY name DESC)
FROM table
ORDER BY name

会给你一个递减顺序的计数器。

结果:

代码语言:javascript
复制
Jay  4
ram  3
ravi 2
roy  1
票数 14
EN

Stack Overflow用户

发布于 2019-11-23 00:41:53

代码语言:javascript
复制
SELECT name,
      @rownum := @rownum + 1 as row_number
FROM your_table
   ,
   (select @rownum := 0) r

我更喜欢使用逗号而不是CROSS JOIN,因为它执行起来更快。使用CROSS JOIN将添加一个额外的步骤,即向表中添加一列。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13566695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档