1
resposta

Retorno dos campos MAX e MIN, validação no HAVING.

Boa noite professor,

Estou começando com o SQL e para entender melhor, depois faço as consultas por parte validando o resultado e fiquei com duvida sobre a consulta que deixo o código abaixo.

SELECT EMBALAGEM, MAX([PREÇO DE LISTA]), MIN([PREÇO DE LISTA]) FROM [TABELA DE PRODUTOS] 
GROUP BY EMBALAGEM HAVING SUM([PREÇO DE LISTA]) <= 80 AND MAX([PREÇO DE LISTA]) >= 6

No inicio do vídeo o sr. informa que a função HAVING é um filtro aplicado sobre o resultado de um GROUP BY, a consulta foi feita no final do vídeo.

Minha duvida está na validação 'AND MAX([PREÇO DE LISTA]) >= 6', se deveria afeta o resultando exibido no MAX e/ou MIN do 'SELECT EMBALAGEM, MAX([PREÇO DE LISTA]), MIN([PREÇO DE LISTA])', entendi que essa validação vai tratar os valores a partir de um certo ponto (>= 6) para maior, mas o valor do MAX e do MIN exibidos no select são não os maiores ou menores dentro da faixa de validação do MAX no HAVING e sim o maior e o menor valor do GROUP BY sem o HAVING.?

1 resposta

Olá -_- jana -_-!

O HAVING para o GROUP BY é equiparável ao WHERE para o SELECT. Neste caso, ele coloca um condição dentro desse HAVING, que a soma do [PREÇO DE LISTA] tem que ser menor ou igual a 80 (não aplica a soma no resultado, mas usa a soma para filtrar resultados).

Com a instrução AND MAX([PREÇO DE LISTA]) >= 6 é adicionado mais um filtro. Ou seja, mesmo que esteja dando instruções para ordenação, ainda assim você pode colocar filtros, como se fosse no WHERE.

WHERE é usado em contextos mais generalistas. o HAVING é usado em grupos de resultados. Nesse link da documentação tem mais informações sobre as diferenças.

Espero ter ajudado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software