如何在 MySQL 查询结果中显示序列号

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6055791/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 19:55:43  来源:igfitidea点击:

How to show sequential number in MySQL query result

mysqlselect

提问by nunu

I have some simple query:

我有一些简单的查询:

SELECT foo, bar FROM table

i think you now whats the result looks like.

我想你现在的结果是什么样的。

What I want to do is to show some sequential number based on how many data appear from query result. its just like AUTO_INCREMENT(its not mean i want to show ID). The result what I want is like:

我想要做的是根据查询结果中出现的数据数量显示一些序列号。它就像AUTO_INCREMENT(这并不意味着我想显示 ID)。我想要的结果是这样的:

|No|   foo   |    bar   |
-------------------------
|1 |   bla   |    123   |
|2 |   boo   |    abc   |
|3 |   wow   |    xxx   |

How should I do to make it?

我该怎么做才能做到?

thanks in advance

提前致谢

回答by bungdito

select @rownum:=@rownum+1 No, foo, bar from table, (SELECT @rownum:=0) r;

回答by divinedragon

The order gets scrambled if you are using GROUP BYclause in your query. The work around is putting your query inside the FROMclause like this.

如果您GROUP BY在查询中使用子句,则订单会被打乱。解决方法是将您的查询放在这样的FROM子句中。

SET @a:=0;
SELECT @a:=@a+1 No, output.*
FROM (
     SELECT foo, bar
     FROM table GROUP BY foo, bar
 ) output;

回答by Travis Heeter

Neither of the answers worked for me, but based on bungdito's source, I realized you can do something easier:

这两个答案都不适合我,但根据bungdito来源,我意识到你可以做一些更简单的事情:

SET @a:=0;
SELECT @a:=@a+1 No, foo, bar
FROM table;

So, first make sure SET @a:=0;runs. That will set up your variable, a. Then you can increment it in the results with @a:=@a+1. I tested this with GROUP BY, ORDER BY, even JOINS and it worked as expected.

所以,首先确保SET @a:=0;运行。这将设置您的变量 a。然后你可以在结果中增加它@a:=@a+1。我用 GROUP BY、ORDER BY 甚至 JOINS 测试了这个,它按预期工作。

回答by Arvind Krmar

If somebody wants to display the row number after ordering records, something like this may work

如果有人想在订购记录后显示行号,这样的事情可能会奏效

set @a=0; 
select @a:=@a+1 serial_number,t.* 
from ( SELECT foo, bar FROM tableORDER BY bar ) t