SQL – Entendendo o Order by e o Group by

Estes dois comandos já não são tão básicos assim, sendo usados em ocasiões particulares, e que em conjunto com outros comandos podem transformar por completo os resultados da sua pesquisa.

Usado pelo comando SELECT, estes dois comandos fazem respectivamente, uma ordenação dos resultados e um agrupamento deles. Podendo até serem usados ao mesmo tempo.

O order by é mais fácil de entender. Como o nome já sugere, ele cria uma ordem nos resultados. Vejamos exemplos para facilitar.

select nome, idade from tabela_clientes

Esse comando irá retornar pra você uma lista completa de clientes, mas na ordem em que foram inseridos no banco. Isso você já sabia né!

Agora digamos que você quer a mesma lista, mas ordenada por nome, ou seja, ordem alfabética. Fácil:

select nome, idade from tabela_clientes order by nome

Foi fácil não foi? Agora digamos que você queira a ordem inversa, ao invés de A – Z, trazer de Z – A (de trás pra frente). Fácil também. O comando order by tem um parâmetro adicional em que você pode especificar se quer uma ordem acendente ou descendente, crescente ou descrecente, que seja. Basta usar as palavras ASC ou DESC.

Então para trazer a mesma pesquisa ordenada de trás pra frente ficaria:

select nome, idade from tabela_clientes order by nome desc

Pra complicar um pouquinho, vejamos, vamos recuperar a lista por ordem alfabética A-Z e quando os nomes forem iguais, mostre por ordem de idade, primeiro os mais velhos.

select nome, idade from tabela_clientes order by nome asc, idade desc

Até que não foi nenhum bixo de sete cabeças. Agora vejamos como usar o group by.

O group by na verdade é bem fácil também, ele começa a ficar confuso quando usado em conjunto com outros elementos do SQL em grandes instruções.

Pra simplificar o exemplo, vamos supor uma lista de nomes apenas. E nesta lista existem nomes repetidos. Você quer visualizar a lista, mas sem ver nomes duplicados ou triplicados. Então usa o group by.

select nome from tabela_clientes group by nome

Bem simples hein. Só pra ficar um pouco mais interessante, vou adicionar um campo do qual estarei falando futuramente em outros posts. Caso você não conheça, não se preocupe, abordarei no futuro.

Para saber a quantidade de vezes que o campo se repete, o número de agrupamentos que foi feito, adicione a coluna:

select count(*), nome from tabela_clientes group by nome

Agora você vê a coluna de nomes, sem repetições e ainda sabe qual a quantidade de vezes que este nome aparece na tabela.

Pronto, você já sabe usar os comandos order by e group by, agora comece a brincar com eles. Sucesso!



Sobre o Autor

MarioSAM é faixa preta 2Dan de Taekwondo. Entusiasta do marketing online. Especulador do mercado financeiro. Projetista web com certificação SCJP da SUN. Com 10 anos de experiência em desenvolvimento de sistemas.