1
resposta

Curiosidade pra quem quiser se divertir

Cheguei ao mesmo resultado que o instrutor dando uma volta ao mundo; fazendo subfunção. Só por curiosidade vou mostrar meu raciocínio, que não está errado. Pra quem quiser se divertir.

1) Notas desdobradas por itens de nota, com imposto calculado para cada item:

select NF.NUMERO, YEAR(NF.DATA_VENDA) AS ANO, INF.QUANTIDADE, INF.PRECO, QUANTIDADE*PRECO AS PRECO_TOTAL, NF.IMPOSTO AS ALÍQUOTA, QUANTIDADE*PRECO*IMPOSTO AS IMPOSTO_PAGO FROM notas_fiscais NF INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO;

2) Notas agrupadas. Imposto calculado pra cada nota: (sem os campos que não têm mais pertinência com a consulta)

select NF.NUMERO, YEAR(NF.DATA_VENDA) AS ANO, SUM(QUANTIDADE*PRECO) AS PRECO_TOTAL, NF.IMPOSTO AS ALÍQUOTA, SUM(QUANTIDADE*PRECO*IMPOSTO) AS IMPOSTO_PAGO FROM notas_fiscais NF INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO GROUP BY NF.NUMERO;

3) Subfunção da consulta 2, pra somar, em uma coluna, o preço total de todas as notas; em outra, o imposto pago total; agrupadas por ano (Retirei a alíquota, que não é mais um campo pertinente à consulta.)

select SUBCON.ANO, SUM(SUBCON.PRECO_TOTAL) AS FATURAMENTO_BRUTO, SUM(SUBCON.IMPOSTO_PAGO) AS IMPOSTO_PAGO FROM (select NF.NUMERO, YEAR(NF.DATA_VENDA) AS ANO, SUM(QUANTIDADE*PRECO) AS PRECO_TOTAL, NF.IMPOSTO AS ALÍQUOTA, SUM(QUANTIDADE*PRECO*IMPOSTO) AS IMPOSTO_PAGO FROM notas_fiscais NF INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO GROUP BY NF.NUMERO) as SUBCON GROUP BY ANO;

4) Resultado final:

select SUBCON.ANO, FLOOR(SUM(SUBCON.IMPOSTO_PAGO)) AS IMPOSTO_PAGO FROM (SELECT YEAR(NF.DATA_VENDA) AS ANO, SUM(QUANTIDADE*PRECO*IMPOSTO) AS IMPOSTO_PAGO FROM notas_fiscais NF INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO GROUP BY NF.NUMERO) as SUBCON WHERE ANO = 2016 GROUP BY ANO;

Interessante notar que, se ponho o arrendondamento do FLOOR na subconsulta, o resultado é substancialmente menor. Porque primeiro arredonda pra depois somar. O correto é primeiro somar pra depois arredondar. Diferenças de centavos se transformam facilmente em diferenças de milhares de reais.

1 resposta

Olá Bruno, tudo bem? Muito legal, deve continuar indo além do curso e aprofundando seus conhecimentos. Quanto aos arrendondamentos, sempre existe uma perda, é normal isso.

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