Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Necessidade do Group BY na atividade 7

Tentando resolver o problema sozinho inicialmente consegui chegar no mesmo resultado do professor sem o uso do group by:

SELECT
    FLOOR(SUM((inf.quantidade * INF.PRECO)* nf.imposto)) AS IMPOSTO_DEVIDO
FROM notas_fiscais NF
 INNER JOIN itens_notas_fiscais INF
 ON inf.numero = nf.numero
WHERE TO_CHAR(nf.data_venda, 'YYYY') = 2016;

Como a falta desse argumento não parece ter interferido no resultado, gostaria de entender o motivo do professor usar ele.

1 resposta
solução!

Olá, Augusto, tudo bem?

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 Oracle 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 informados na cláusula group by, ou seja, se além dos campos que estão na função de agregação SUM, você tivesse outros campos, como por exemplo, a data, você precisaria utilizar a cláusula group by:

SELECT
    TO_CHAR(nf.data_venda, 'YYYY'),
    FLOOR(SUM((inf.quantidade * INF.PRECO)* nf.imposto)) AS IMPOSTO_DEVIDO
FROM notas_fiscais NF
 INNER JOIN itens_notas_fiscais INF
 ON inf.numero = nf.numero
WHERE TO_CHAR(nf.data_venda, 'YYYY') = 2016
GROUP BY TO_CHAR(nf.data_venda, 'YYYY');

A título de curiosidade, caso queira ler um pouco mais a respeito deste assunto, indico a leitura do artigo Trabalhando com funções de agregação, publicado no blog da Alura.

Espero ter ajudado e bons estudos!

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