Translate

sábado, 29 de novembro de 2014

Postgresql - Função MIN

A função MIN retorna o valor mínimo (menor valor) de uma coluna. 
Serão descritos 3 exemplos de utilização desta função. 

Caso tenha interesse, faça o download ou veja os scripts no github.


SINTAXE
SELECT MIN(nome_da_coluna) FROM nome_da_tabela;

1º Exemplo
 
Neste exemplo, utilizaremos a tabela "tb_imoveis". Veja a imagem abaixo:

tb_imoveis
  

Cenário: qual o imóvel que possui o valor mais baixo?

Solução: o valor dos imóveis estão armazenados na coluna valor, logo devemos calcular o valor mais baixo a partir desta coluna.
Para calcularmos o valor mínimo, executamos a sentença abaixo:

SELECT MIN(valor) FROM tb_imoveis;

Após a execução, teremos o imóvel com o valor mais baixo. Conforme podemos visualizar na imagem a seguir:

O nome da coluna aparece como "min", mas vamos supor que precisamos que seja exibido "imovel_valor_minimo".
Podemos modificar o nome desta coluna, ou seja, criar um alias (apelido). Colocamos o alias depois do "AS
SELECT MIN(valorAS imovel_valor_minimo FROM tb_imoveis;

Após a execução, o nome da coluna será exibido como "imovel_valor_minimo".


2º Exemplo

Cenário: Uma equipe de três atletas treina uma série de corridas. Queremos saber qual foi o melhor treino para cada atleta, ou seja qual corrida levou menos tempo.
Neste exemplo, utilizaremos a tabela "tb_treino".

tb_treino

Solução: já que procuramos o menor tempo por atleta, vamos agrupar os atletas que estão armazenados na coluna "atleta_id". Para agrupar, utilizaremos o " GROUP BY".

Para calcularmos o menor tempo por atleta, executamos a sentença abaixo:

SELECT atleta_id, MIN(tempo) AS melhor_tempo
FROM tb_treino
GROUP BY atleta_id;

Após a execução, teremos o melhor tempo  para cada atleta. Conforme podemos visualizar na imagem abaixo:



Para ordenar a identificação dos atleta em ordem crescente, ou seja, do valor menor para o maior, deve-se usar "ORDER BY" seguido do nome da coluna, neste caso, a coluna 'atleta_idserá ordenada .
Para ordenar as identificações, utilizamos a sentença abaixo:

SELECT atleta_id, 
MIN(tempo) AS pior_tempo
FROM tb_treino
GROUP BY atleta_id
ORDER BY atleta_id;

Após a execução, teremos as identificações dos atletas em ordem crescente. Conforme podemos visualizar na imagem abaixo:




3º Exemplo

Cenário: Qual o atleta que obteve o melhor treino? Qual a data que o treino ocorreu?
Neste exemplo, utilizaremos a tabela "tb_treino".

tb_treino

Solução: também podemos utilizar a função "MIN" para filtrar um registro, desde que a função "MIN" pertença a uma subquery.

    Veja a subquery destacada, em azul, na sentença abaixo:

    SELECT 
    atleta_id,   
    data, 
    tempo AS melhor_tempo
    FROM tb_treino 
    WHERE tempo =
    (
        SELECT MIN(tempo)
        FROM tb_treino
    )

    Após a execução da sentença, teremos o resultado exibido na imagem abaixo:

    Observação:

    A função MIN não funciona no WHERE sem a subquery.

    WHERE tempo = MIN(tempo)

    Deixe o seu comentário ou sugestão.
    Gostou?  Siga no Google +  ou Facebook.

    Nenhum comentário:

    Postar um comentário