Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Técnica Pure-SQL para Autonumeração de Linhas no Conjunto de Resultados


Para ter um número de linha significativo, você precisa ordenar seus resultados. Então você pode fazer algo assim:
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

Observe que a cláusula WHERE da subconsulta precisa corresponder à cláusula WHERE ou à chave primária da consulta principal e o ORDER BY da consulta principal.

O SQL Server tem a construção ROW_NUMBER() OVER para simplificar isso, mas não sei se o MySQL tem algo especial para resolvê-lo.

Como meu post aqui foi aceito como resposta, também quero chamar a atenção para a resposta de Dan Goldstein, que é muito semelhante em abordagem, mas usa um JOIN em vez de uma subconsulta e geralmente terá um desempenho melhor