Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Pure-SQL-Technik für die automatische Nummerierung von Zeilen in der Ergebnismenge

Um eine aussagekräftige Zeilennummer zu erhalten, müssen Sie Ihre Ergebnisse sortieren. Dann können Sie so etwas tun:

SELECT id, name
    , (SELECT COUNT(*) FROM people p2 WHERE name='Spiewak' AND p2.id <= p1.id) AS RowNumber
FROM people p1
WHERE name = 'Spiewak'
ORDER BY id

Beachten Sie, dass die WHERE-Klausel der Unterabfrage mit der WHERE-Klausel oder dem Primärschlüssel der Hauptabfrage und übereinstimmen muss das ORDER BY der Hauptabfrage.

SQL Server hat das ROW_NUMBER() OVER-Konstrukt, um dies zu vereinfachen, aber ich weiß nicht, ob MySQL etwas Besonderes hat, um es zu adressieren.

Da mein Beitrag hier als Antwort akzeptiert wurde, möchte ich auch die Antwort von Dan Goldstein hervorheben, die einen sehr ähnlichen Ansatz hat, aber einen JOIN anstelle einer Unterabfrage verwendet und häufig eine bessere Leistung erbringt