如何枚举SQL中返回的行?

时间:2010-06-15 18:07:17

标签: sql enumeration

我想知道是否可以枚举返回的行。不是根据任何列内容而是仅产生顺序整数索引。 E.g。

select ?, count(*) as usercount from users group by age

会返回一些内容:

1    12
2    78
3     4
4    42

适用于https://data.stackexchange.com/

7 个答案:

答案 0 :(得分:15)

尝试:

SELECT
    ROW_NUMBER() OVER(ORDER BY age) AS RowNumber
        ,count(*) as usercount 
    from users 
    group by age

答案 1 :(得分:3)

如果是Oracle,请使用rownum

SELECT SOMETABLE.*, ROWNUM RN
FROM SOMETABLE
WHERE SOMETABLE.SOMECOLUMN = :SOMEVALUE
ORDER BY SOMETABLE.SOMEOTHERCOLUMN;

最终答案将完全取决于您正在使用的数据库。

答案 2 :(得分:2)

对于MySql:

SELECT  @row := @row + 1 as row FROM anytable a, (SELECT @row := 0) r

答案 3 :(得分:1)

如何执行此操作取决于您的数据库服务器。在SQL Server中,您可以使用row_number()

select  row_number() over (order by age)
,       age
,       count(*) as usercount 
from    users 
group by 
        age
order by
        age

但使用客户端行号通常更容易,更快捷。

答案 4 :(得分:1)

使用sql server中可用的rownumber函数

SELECT 
    ROW_NUMBER() OVER (ORDER BY columnNAME) AS 'RowNumber',count(*) as usercount
    FROM users

答案 5 :(得分:0)

Mysql

set @row:=0;

select @row:=@row+1 as row, a.* from table_name as a;

答案 6 :(得分:0)

与大多数其他答案相反,并根据实际的OP问题,来

  

根据任何列内容枚举返回的行(...)

但是按照返回查询的顺序,可以在ORDER BY函数中将虚拟序数变量用于ROW_NUMBER,例如

ROW_NUMBER() OVER(ORDER BY (SELECT 0) AS row_num

实际上可以使用任何内容作为SELECT语句的参数,例如SELECT 100SELECT ‘A’SELECT NULL等。

这样,行号将按照将数据添加到表中的顺序枚举。