Contador de linhas em consultas SQL
Dica publicada em Banco de Dados / Avançado
Contador de linhas em consultas SQL
Essa dica vai para quem tem a necessidade de implementar um contador de linhas no resultado de uma consulta SQL. A sintaxe da dica foi testada em MySQL/MariaDB, não garanto que irá funcionar em outros tipos de banco de dados. Se você utiliza outro, teste e comente aqui.
Vamos lá, supondo que tenho uma tabela "pessoas" e quero a lista de nomes em ordem alfabética:
Resultado:
Alberto
Bianca
Camilo
Luiza
...
Mas, e se eu quiser enumerar as pessoas implementando um contador? Ao invés de jogar isso para a lógica do teu código, podemos usar o SQL para nos ajudar:
Resultado:
1, Alberto
2, Bianca
3, Camilo
4, Luiza
...
A mágica foi possível declarando-se a variável "@num" com valor 0 dentro da "CROSS JOIN", enquanto que a query principal se encarregou de incrementar o contador.
Simples assim! Espero ter ajudado.
Vamos lá, supondo que tenho uma tabela "pessoas" e quero a lista de nomes em ordem alfabética:
SELECT nome FROM pessoas ORDER BY nome
Resultado:
Alberto
Bianca
Camilo
Luiza
...
Mas, e se eu quiser enumerar as pessoas implementando um contador? Ao invés de jogar isso para a lógica do teu código, podemos usar o SQL para nos ajudar:
SELECT
@num = @num + 1 as ordem,
nome
FROM pessoas
CROSS JOIN (SELECT @num := 0) n
ORDER BY nome
@num = @num + 1 as ordem,
nome
FROM pessoas
CROSS JOIN (SELECT @num := 0) n
ORDER BY nome
Resultado:
1, Alberto
2, Bianca
3, Camilo
4, Luiza
...
A mágica foi possível declarando-se a variável "@num" com valor 0 dentro da "CROSS JOIN", enquanto que a query principal se encarregou de incrementar o contador.
Simples assim! Espero ter ajudado.