2
respostas

MAX E MIN por Classificação Etária

Prezados, boa noite! Tentei fazer uma consulta de MAX e MIN por Classificação Etária usando a query abaixo. Gostaria de saber se vocês teriam uma sugestão para fazer a mesma pesquisa de maneira mais enxuta. Desde já muito obrigado! Abraços

 /*TABELA_DE_CLIENTES MAX E MIN POR CLASS_ETARIA*/    

 SELECT 
    (CASE
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
        ELSE 'CRIANÇA'
    END) AS CLASS_ETARIA, 

    MAX (DATA_DE_NASCIMENTO) AS MAIOR_DT_NASC , 

    MIN (DATA_DE_NASCIMENTO) AS MENOR_DT_NASC
FROM 
    (
    SELECT NOME, DATA_DE_NASCIMENTO,
        (CASE
              WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
              WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
              ELSE 'CRIANÇA'
        END) AS CLASS_ETARIA
    FROM TABELA_DE_CLIENTES
    )

GROUP BY 
    (CASE
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
        ELSE 'CRIANÇA'
    END)

ORDER BY 
    (CASE
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
        ELSE 'CRIANÇA'
    END);
2 respostas

Olá Yuri, tudo bem?

Consegui obter o mesmo resultado da sua query e deixando ela um pouco mais enxuta, como você sugeriu, removendo a subconsulta e utilizando no Order By apenas o alias no lugar de todo a expressão Case:

SELECT 
    (CASE
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
        ELSE 'CRIANÇA'
    END) AS CLASS_ETARIA, 
    MAX (DATA_DE_NASCIMENTO) AS MAIOR_DT_NASC , 
    MIN (DATA_DE_NASCIMENTO) AS MENOR_DT_NASC
 FROM TABELA_DE_CLIENTES
GROUP BY 
    (CASE
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') < '1990' THEN 'VELHO'
        WHEN TO_CHAR(DATA_DE_NASCIMENTO, 'YYYY') <= '1995' THEN 'JOVEM'
        ELSE 'CRIANÇA'
    END) 
ORDER BY  CLASS_ETARIA;

Removi a subconsulta, pois você não exibiu no resultado da consulta o campo NOME e nem o campo DATA_DE_NASCIMENTO dos clientes, então por este motivo ela não é necessária.

Espero ter ajudado e bons estudos!

Bom dia, Danielle! Tudo joia! Espero que esteja tudo bem com você também. Nossa! Ficou bem melhor! Muito obrigado! Abraços