3
respostas

Como somar as ROWS (linhas) de um CAMPO (coluna)

Para a questão:

Na tabela de notas fiscais, temos o valor do imposto. Já na tabela de itens, temos a quantidade e o faturamento. Calcule o valor do imposto pago no ano de 2016, arredondando para o menor inteiro.

Fiz a seguinte QUERY:

SELECT DATA, QUANTIDADE, PREÇO, IMPOSTO, QUANTIDADE*PREÇO*IMPOSTO AS [IMPOSTO_PAGO]
FROM [ITENS NOTAS FISCAIS] I INNER JOIN [NOTAS FISCAIS] N
ON I.[NUMERO] = N.[NUMERO]
WHERE YEAR(DATA) = 2016;

Penso que só falta somar as ROWS (linhas) do CAMPO [IMPOSTO_PAGO] e depois aplicar o FLOOR nele.

Como faço para somar as ROWS de um CAMPO? Consigo a solução da questão assim?

Se não, então onde errei no meu raciocínio?

3 respostas

Olá Paulo, tudo bem?

Você está indo muito bem Paulo e o seu raciocínio está correto.

Você pode somar e arredondar o valor da seguinte forma:

FLOOR(SUM(IMPOSTO * (QUANTIDADE * PREÇO)))  

Como você está utilizando a função de agregação SUM, você precisa utilizar a cláusula GROUP BY. Porém, você só precisa selecionar os campos QUANTIDADE, PREÇO, IMPOSTO na função de agregação, você apenas seleciona o campo de DATA e informa na cláusula GROUP BY:

GROUP BY YEAR(DATA);

A sua query completa:

SELECT YEAR(DATA) AS ANO,  FLOOR(SUM(IMPOSTO * (QUANTIDADE * PREÇO)))  AS [IMPOSTO_PAGO]
FROM [ITENS NOTAS FISCAIS] I INNER JOIN [NOTAS FISCAIS] N
ON I.[NUMERO] = N.[NUMERO]
WHERE YEAR(DATA) = 2016
GROUP BY YEAR(DATA);

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Danielle, boa noite!

Sobre o que você disse, então na parte do código acima:

FLOOR(SUM(IMPOSTO * (QUANTIDADE * PREÇO)))  

O SUM soma cada linha depois da multiplicação (IMPOSTO * (QUANTIDADE * PREÇO)), tendo assim a soma dessa multiplicação em todas as linhas?

Sendo assim, chego a seguinte conclusão: toda função de agregação reuni todas as linhas de uma tabela, quer seja somando, SUM, contando, COUNT, e outros, é isto? Se sim como seria na análise de todas a linhas na funções de agregação: MAX, MIN, AVG? Tem mais funções de agregação?

Isso mesmo Paulo, o SUM soma cada linha do resultado da multiplicação. Mas nem toda função de agregação, agrupa as linhas de uma tabela.

  • MAX: Analisa um conjunto de valores de uma coluna e retorna o maior entre eles
  • MIN: Analisa um grupo de valores de uma coluna e retorna o menor entre eles
  • AVG: Calcula a média dos valores de uma coluna
  • SUM: Realiza a soma dos valores de uma coluna
  • COUNT: Realiza uma contagem de todas as linhas(registros) da tabela

No SQL Server, existem outras funções de agregação, como a VAR que retorna a variância estatística de todos os valores da expressão especificada. Então, a título de curiosidade, caso queira ler um pouco mais a respeito do assunto, recomendo a leitura da documentação do SQL Server, onde aborda sobre todas as funções de agregação.

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!