2010-06-15 13 views
16

Me preguntaba si sería posible enumerar las filas devueltas. No de acuerdo con el contenido de ninguna columna, sino solo produciendo un índice entero secuencial. P.ej.¿Cómo enumerar las filas devueltas en SQL?

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

regresarían algo en la línea:

1 12 
2 78 
3  4 
4 42 

que es para https://data.stackexchange.com/

+2

¿Qué DBMS estás usando? – BenV

+0

@benv: es para http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost, entonces las etiquetas relevantes pueden haber sido [tag: tsql] y [tag: dataexplorer]. Pero ahora que hay respuestas mysql y oracle, es un poco tarde para cambiarlo. –

Respuesta

13

intento:

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

cómo se haría eso depende de su servidor de base de datos. En SQL Server, puede utilizar row_number():

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

Pero a menudo es más fácil y rápido de usar números de fila del lado del cliente.

+0

la 'partición por edad' hará que el número descanse para cada 'edad', y la consulta se agrupa por edad, por lo que el número de fila será 1 por cada fila. –

+0

@KM: Derecha, editado en la respuesta – Andomar

1

uso rownumber función disponible en el servidor SQL

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

gracias por el enlace – SilentGhost

2

para MySQL:

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

Si se trata de Oracle, utilice rownum.

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

La respuesta final dependerá completamente de la base de datos que esté utilizando.

Cuestiones relacionadas