MYSQL - Utilizando UNION e multiplas queries para agrupar resultados
Um comando muito pouco utilizado é o UNION mas ele é extremamente útil quando queremos efetuar selects de uma tabela ou várias e uni-las em um único resultado.
Isto permite ao programa que receber os dados poder trata-los de uma unica vez ao invés de ter de efetuar vários selects separadamente e junta-los.
Neste post vamos trabalhar com duas coisas interessantes que são o comando UNION e SELECTS de uma mesma tabela mas com diferentes critérios.
Vamos utilizar como base a tabela 'teste' abaixo
id nome idade estado
1 Pedro 50 SP
2 Antonio 30 RJ
3 Amélia 20 SP
4 Marta 15 RJ
5 Maria 80 SP
O objetivo é selecionar a maior idade da tabela. Podemos fazer isto de maneira muito fácil pelo comando abaixo:
SELECT MAX(idade) FROM teste
idade
80
Ótimo, porém o problema é que apenas recuperamos o valor da idade máxima, sem as informações sobre quem possui esta idade, ou seja, não trouxemos a linha inteira.
Para que possamos fazer isto podemos utilizar o comando abaixo:
SELECT * FROM teste ORDER BY idade DESC LIMIT 1
id nome idade estado
5 Maria 80 SP
ou seja, ordenamos os valores por idade do maior para o menor e mandamos o SQL nos retornar apenas a primeira linha.
Bem, nosso problema parece quase solucionado.
Se quisermos uma lista das maiores idades por estado então teremos de fazer duas consultas distintas, uma filtrando por um estado e outra consulta filtrando pelo segundo estado.
Para unir os dois selects em um único resultado utilizamos o UNION:
(SELECT * FROM teste WHERE estado = 'SP' ORDER BY idade DESC LIMIT 1) UNION (SELECT * FROM teste WHERE estado = 'RJ' ORDER BY idade DESC LIMIT 1)
id nome idade estado
5 Maria 80 SP
2 Antonio 30 RJ
e assim temos em uma única saída (Query) os resultados que de outra forma precisariamos tratar em duas queries separadas.
É isso ai.
Comentários
Postar um comentário