2010-06-15 21 views
16

Mi chiedevo se sarebbe possibile enumerare le righe restituite. Non in base al contenuto di una colonna, ma solo a un indice intero sequenziale. Per esempio.Come enumerare le righe restituite in SQL?

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

sarebbe restituire qualcosa lungo le linee:

1 12 
2 78 
3  4 
4 42 

è per https://data.stackexchange.com/

+2

Che tipo di DBMS stai utilizzando? – BenV

+0

@benv: è per http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost quindi i tag rilevanti potrebbero essere stati [tag: tsql] e [tag: dataexplorer]. Ma ora che ci sono risposte mysql e oracle, è un po 'tardi per cambiarlo. –

risposta

13

prova:

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

Come si farebbe che dipende dal vostro server di database. In SQL Server, è possibile utilizzare row_number():

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

ma è spesso più facile e veloce da usare client numeri di riga laterale.

+0

la 'partizione per età' farà sì che il numero resti per ogni' age', e la query è raggruppata per età, quindi il numero di riga sarà 1 per ogni riga. –

+0

@KM: a destra, modificato in risposta – Andomar

1

uso rownumber funzione disponibile in SQL Server

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

grazie per il link – SilentGhost

2

per MySQL:

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

Se si tratta di Oracle, utilizzare rownum.

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

La risposta finale dipenderà interamente dal database che si sta utilizzando.

Problemi correlati