Olá, Vinicius, tudo bem?
A função de agregação AVG, retorna a média aritmética de um conjunto de valores. A média é obtida somando todos os valores e dividindo o valor encontrado pelo número de dados desse conjunto.
No exemplo utilizado pelo instrutor durante a aula, a utilização do AVG não faz muito sentido, já que o resultado final não é alterado. Porém, o foco principal da explicação é utilização da instrução CASE quando temos em uma consulta a cláusula group by.
Ao utilizarmos uma função de agregação, normalmente também precisamos informar a cláusula group by, que é utilizada para agrupar registros semelhantes de uma tabela em um ou mais campos. No SQL Server não é permitido realizar consultas onde os campos listados na seleção que não estão em uma função de agregação, não estão informadas na cláusula group by.
Como no exemplo utilizado pelo instrutor, na seleção temos o campo [NOME DO PRODUTO]
, a instrução CASE e o campoAVG([PREÇO DE LISTA])
que está dentro da função de agregação AVG, neste caso, precisamos informar na cláusula group by, todos os campos que não fazem parte da função de agregação, ou seja, o campo [NOME DO PRODUTO]
a instrução CASE ou o campo [PREÇO DE LISTA]
que faz parte da instrução CASE, precisam ser informados na cláusula group by, caso contrário, um erro será retornado:
SELECT [NOME DO PRODUTO],
CASE WHEN [PREÇO DE LISTA] >= 12 THEN 'PRODUTO CARO'
WHEN [PREÇO DE LISTA] >= 7 AND [PREÇO DE LISTA] < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO' END,
AVG([PREÇO DE LISTA])
FROM
[TABELA DE PRODUTOS]
GROUP BY [NOME DO PRODUTO]
Uma forma de aplicar o AVG nesta consulta, é buscar a média de preço dos produtos por classificação, ou seja, será retornado a média aritmética de todos os produtos classificados como barato, de todos os produtos classificados como em conta e de produtos classificados como caro:
SELECT
CASE WHEN [PREÇO DE LISTA] >= 12 THEN 'PRODUTO CARO'
WHEN [PREÇO DE LISTA] >= 7 AND [PREÇO DE LISTA] < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO' END AS 'CLASSIFICAÇÃO',
AVG([PREÇO DE LISTA]) as 'Média'
FROM
[TABELA DE PRODUTOS]
GROUP BY CASE WHEN [PREÇO DE LISTA] >= 12 THEN 'PRODUTO CARO'
WHEN [PREÇO DE LISTA] >= 7 AND [PREÇO DE LISTA] < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO' END
Qualquer nova dúvida é só falar e bons estudos!