2010-06-15 6 views
16

Je me demandais s'il serait possible d'énumérer les lignes retournées. Pas selon n'importe quel contenu de colonne mais juste en donnant un index entier séquentiel. Par exemple.Comment énumérer les lignes retournées dans SQL?

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

retourne quelque chose le long des lignes:

1 12 
2 78 
3  4 
4 42 

est pour https://data.stackexchange.com/

+2

Quel SGBD utilisez-vous? – BenV

+0

@benv: c'est pour http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost alors les tags concernés peuvent avoir été [tag: tsql] et [tag: dataexplorer]. Mais maintenant qu'il y a des réponses mysql et oracle, il est un peu tard pour le changer. –

Répondre

13

essayer:

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

Comment vous feriez cela dépend de votre serveur de base de données. Dans SQL Server, vous pouvez utiliser row_number():

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

Mais il est souvent plus facile et plus rapide d'utiliser les numéros de ligne côté client.

+0

la 'partition par age' provoquera le nombre de repos pour chaque' age', et la requête est groupée par âge, de sorte que votre numéro de ligne sera 1 pour chaque ligne. –

+0

@KM: Droit, édité dans la réponse – Andomar

1

utilisation rownumber fonction disponible dans le serveur SQL

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

merci pour le lien – SilentGhost

2

Pour MySql:

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

Si c'est Oracle, utilisez rownum.

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

La réponse finale dépend entièrement de la base de données que vous utilisez.

Questions connexes