2010-06-15 5 views
16

Ich frage mich, ob es möglich wäre, zurückgegebene Zeilen aufzuzählen. Nicht nach irgendeinem Spalteninhalt, sondern nur zu einem sequentiellen ganzzahligen Index. Z.B.Wie werden zurückgegebene Zeilen in SQL aufgelistet?

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

würde etwas entlang der Linien zurück:

1 12 
2 78 
3  4 
4 42 

es ist für https://data.stackexchange.com/

+2

Welche DBMS verwenden Sie? – BenV

+0

@benv: es ist für http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost dann möglicherweise die relevanten Tags gewesen [Tag: Tsql] und [Tag: DataExplorer]. Aber jetzt, da es mysql und Oracle Antworten gibt, ist es ein bisschen spät, um es zu ändern. –

Antwort

13

Versuch:

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

Wie Sie, dass auf Ihrem Datenbankserver abhängig machen würde. In SQL Server, können Sie row_number() verwenden:

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

Aber es ist oft einfacher und schneller Client-Seite Zeilennummern zu verwenden.

+0

Die Partition nach Alter bewirkt, dass die Zahl für jedes Alter ruht, und die Abfrage wird nach Alter gruppiert, sodass die Zeilennummer für jede Zeile 1 ist. –

+0

@KM: Richtig, in Antwort bearbeitet – Andomar

1

Verwendung rownumber Funktion in SQL Server

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

danke für den Link – SilentGhost

2

Für MySql:

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

Wenn es Oracle ist, verwenden Sie rownum.

Die endgültige Antwort hängt vollständig davon ab, welche Datenbank Sie verwenden.