Translate

domingo, 23 de novembro de 2014

Postgresql - Funcão MAX

A função MAX retorna o valor máximo (maior 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 MAX(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 alto?

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

SELECT MAX(valor) FROM tb_imoveis;

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


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

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



2º Exemplo

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

tb_treino

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

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

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

Após a execução, teremos o pior 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, 
MAX(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 pior treino? Qual a data que o treino ocorreu?
Neste exemplo, utilizaremos a tabela "tb_treino".




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

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

    SELECT 
    atleta_id,   
    data, 
    tempo AS pior_tempo
    FROM tb_treino 
    WHERE tempo =
    (
        SELECT MAX(tempo)
        FROM tb_treino
    )

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


    Observação:

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

    WHERE tempo = MAX(tempo)

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

    Nenhum comentário:

    Postar um comentário