Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

uso do AVG

Não entendi o uso do avg. Ele nao está calculando media nenhuma. Na verdade, no resultado da consulta, ele mostra o preço de lista de cada produto.

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],
    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
2 respostas
solução!

Olá Gabriel, tudo bem?

O instrutor utilizou a função AVG, para não precisar informar o campo PREÇO DE LISTA no GROUP BY.

Quando utilizamos o GROUP BY, precisamos informar todos os campos que foram selecionados, a menos que o campo esteja contido em uma função de agregação, neste caso, não é necessário informar o campo no GROUP BY.

Caso o instrutor quisesse utilizar o GROUP BY sem utilizar uma função de agregação, ele precisaria informar todos os campos no GROUP BY , dessa forma:

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,
    [PREÇO DE LISTA]
FROM
[TABELA DE PRODUTOS]
GROUP BY [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, [PREÇO DE LISTA];

Porém o resultado seria exibido em uma ordem diferente da que ele desejava.

Espero ter esclarecido a sua dúvida e bons estudos!

Obrigado!