Ordenação Especial de Registros do BD

Artigo que mostra como realizar buscas SQL utilizando um critério de ordenação especial, através da utilização de expressões.

Introdução

Todos que trabalham com Bancos de Dados sabem que o comando SELECT permite que os resultados obtidos sejam ordenados de acordo com algum critério. Porém, a utilização mais comum do ORDER BY é com uma coluna do BD, e normalmente é especificada uma ordem crescente ou decrescente (ASC ou DESC).

Porém, em algumas situações, não queremos usar simplesmente uma ordem crescente ou decrescente. Por exemplo, se temos uma tabela com uma coluna "status" e queremos mostrar primeiro os registros com status "5", e depois mostrar o resto. Neste caso, precisamos de um recurso especial para ordenação.

ORDER BY com expressões

O MySQL (e provavelmente outros SGBDs) oferece um recurso para ordenação que é através da utilização de expressões.

Para solucionar o problema apresentado no segundo parágrafo da Introdução, poderiamos fazer a seguinte SQL:

SELECT * FROM tabela ORDER BY status = 5 DESC;

Isso significa que primeiro serão mostrados os registros com status valendo 5 depois o resto. Os registros com status valendo 5 ficam em primeiro porque usamos o DESC, caso contrário, estes registros seriam mostrados por último.

Com este recurso, podemos fazer coisas mais elaboradas. Por exemplo:

SELECT * FROM tabela ORDER BY status = 5 DESC, status = 3 DESC, status ASC;

Neste caso, estamos retornando primeiro os registros com status 5, depois os registros com status 3, depois os outros registros com o status em ordem crescente, ou seja, na ordem 1, 2, 4, 6, 7, 8, 9, ...

3 comentários