Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como usar a função T-SQL do SQL Server SUM:5 casos de uso


A função T-SQL SUM é uma das funções fundamentais. Sua finalidade é calcular a soma de todos os valores na coluna especificada – observe que ela se aplica apenas a colunas numéricas.

Abaixo está a sintaxe do SQL SUM.
-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )  

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • TODOS é um valor padrão, não obrigatório para passar. Permite retornar a soma de todos os valores.
  • DISTINTO especifica que deve retornar apenas a soma de valores únicos, ignorando valores duplicados.
  • Expressão é a categoria de tipo de dados numéricos exatos ou aproximados, exceto para o bit tipo de dados.
  • ACABOU Cláusula com partition_by_clause e order_by_clause é para usar esta função em uma partição específica.
    • partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada
    • pedido_por_cláusula determina a ordem lógica na qual a operação é executada.

Para demonstrar o uso da função SQL SUM, criei uma tabela chamada Employee . Tem 5 colunas – nome , salário , aluguel , imposto , e natureza do emprego . Os seguintes casos de uso estarão em foco:
  1. Uso básico ou simples da função SOMA
  2. Usando SUM com expressões CASE
  3. Usando SUM com a instrução GROUP BY
  4. Usando SUM com cláusula HAVING
  5. Aplicando SUM para expressões aritméticas múltiplas ou complexas

Além disso, aprenderemos outros casos de uso, como usar SUM com cláusula WHERE, cláusula ORDER BY ou usar DISTINCT na função SUM para obter a soma de valores exclusivos. Mas as primeiras coisas primeiro.

Caso de uso 1:função SQL SUM simples


Como dito acima, tenho uma tabela chamada Employee com poucas colunas. Suponha que sua empresa queira saber quanto custo salarial eles estão gastando com todos os funcionários. Para obter o valor, basta somar o salário de todos os funcionários. SUM() facilitará sua vida, fornecendo tais relatórios rapidamente.

Usaremos a função SUM() no salário coluna, e a saída será o custo salarial total gasto em todos os funcionários da empresa:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]

Se você tiver qualquer valor NULL na coluna, esta função irá ignorá-lo e prosseguir com o próximo valor da linha. Assim, você pode ter NULL para qualquer funcionário que deixou a organização – a empresa não está pagando nada a esse recurso.

Você pode ver a saída abaixo – ela mostra o valor de $ 885.000 gasto nos salários dos funcionários:

Se houver duplicados valores em qualquer coluna e você deseja obter a soma de todos os valores exclusivos valores, você pode usar o DISTINCT argumento:
USE DBName
GO
--Get the sum of all values from column salary
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

--Get the sum of all unique values from column salary
SELECT SUM(DISTINCT Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

Eu executei as duas instruções juntas. Primeiro, era o da etapa anterior com todos os valores salariais. A segunda foi para valores únicos – usou o DISTINCT argumento.

Dê uma olhada na captura de tela abaixo - ela demonstra as saídas de ambas as declarações e elas são diferentes. Quando uso a função SUM para todos os valores por padrão, a saída é $ 885000. Quando estou usando o DISTINCT argumento para obter apenas a soma de valores exclusivos, a saída é $ 65.000.

Assim, temos valores semelhantes nesta coluna. em termos de negócios, significa que temos poucos funcionários recebendo os mesmos valores de seu salário.

Este exemplo demonstra o uso do DISTINCT argumento para obter a soma de todos os valores exclusivos. Na prática, nos permite evitar valores duplicados do resultado final.

Também podemos usar o WHERE cláusula em SQL SUM (). Digamos que sua empresa queira obter o custo total que gasta para funcionários que recebem mais de US$ 100.000 como salário, e não um funcionário permanente para entender a distribuição de custos. O ONDE cláusula filtrará o resultado e fornecerá o custo total de acordo com os requisitos do negócio.

Na instrução T-SQL abaixo, você pode ver o WHERE cláusula adicionada na Natureza do Emprego coluna. Esta coluna mantém um registro de cada funcionário, sejam eles funcionários permanentes ou contratados.

Observe que usei o operador AND para ajustar os dois requisitos:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

A saída mostra que a empresa gasta $ 240.000 com os funcionários que recebem $ 100.000 ou mais, e não com funcionários permanentes.

Caso de uso 2:função SQL SUM com expressões CASE


Em nosso cenário, queremos saber quantos funcionários estão trabalhando de forma permanente junto com seus outros detalhes. para obter esse resultado, podemos usar o CASE expressão na SOMA () função. No entanto, você pode obter esse resultado facilmente simplesmente colocando WHERE cláusula, às vezes você precisa de CASE e SOMA em um requisito de consulta complexo.

Dê uma olhada na instrução T-SQL abaixo com o CASE expressão dentro da SOMA () função:
--USE SUM function with CASE expression
SELECT 
SUM(
CASE
  WHEN [Employment Nature] = ‘Permanent’ THEN 1 
  ELSE 0 
  END) As [Total Employees],
   FROM [dbo].[Employee]

A saída das declarações acima mostra 4 - a empresa tem apenas 4 funcionários permanentes conforme seus registros no Funcionário tabela.

Vejamos outro exemplo de CASE com SOMA () .

Ao explorar o caso de uso 1, encontramos os custos totais gastos com funcionários contratuais que recebem US$ 100.000 ou mais na seção acima no caso de uso 1. Agora, queremos encontrar o número desses funcionários. E o CASO expressão entrará na imagem novamente.

Podemos usar CASE na mesma instrução T-SQL usada antes. Abaixo segue o exemplo:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost],
SUM(CASE WHEN [Employment Nature] = ‘Contractor’ AND Salary >100000 THEN 1
ELSE 0
END) AS [Contractors Headcount]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

A saída está nos mostrando 2 empreiteiros trabalhando e recebendo mais de $ 100.000.

Você pode usar vários aspectos do CASE expressão no SELECT declaração juntamente com a SOMA () função para atender às suas necessidades de negócios.

Caso de uso 3:função SQL SUM com GROUP BY


Vamos supor que nossa empresa queira saber quanto dinheiro no total gasta com seus funcionários permanentes e quanto dinheiro gasta com funcionários contratados. Podemos obter esse conjunto de resultados usando a SUM função junto com o GROUP BY demonstração.

Observe a instrução T-SQL abaixo. Eu usei o GROUP BY declaração sobre a Natureza do Emprego coluna e aplicou a função SUM no Salary coluna para obter o salário total de cada tipo de funcionário categorizado de acordo com sua natureza de emprego.
USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]

O conjunto de resultados fornece o dinheiro total gasto em contratados e funcionários permanentes. Se você adicionar esses dois números, a soma deles será o dinheiro total gasto no salário de seus funcionários (compare esse número com a primeira captura de tela deste artigo).

USE Caso 4:Função SQL SUM com instrução HAVING


Agora, vamos explorar o uso da função SUM com as instruções HAVING e GROUP BY juntas. Nosso exemplo exibirá a lista de funcionários que recebem mais de US$ 150.000 por ano. Podemos obtê-lo simplesmente usando a instrução SELECT com a cláusula WHERE, mas mostrarei como obter o mesmo resultado com HAVING, GROUP BY e SUM.

Existem 2 scripts T-SQL. A saída de ambas as instruções é a mesma, mas o primeiro script usa uma instrução SELECT simples, enquanto o segundo código usa a função SUM junto com as cláusulas GROUP BY e HAVING.
USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING
SELECT name, SUM(salary) AS [Salary]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Veja as saídas de ambos os scripts:

Há outro aspecto de usar essas declarações. Eu passei expressões aritméticas na função SUM para obter o rent e imposto despesas dos funcionários. Em seguida, apliquei GROUP BY e TER declarações sobre o Salário coluna. Em palavras simples, eu queria saber as despesas totais de aluguel e impostos gastas por funcionários com salário de $ 150.000 ou mais.

Eu também usei duas consultas. A primeira lista os detalhes de todos os funcionários que recebem $ 150.000 ou mais. Essa saída é buscada apenas para validação e verificação. O segundo usa a SOMA função em duas colunas (aluguel e imposto ) como suas despesas totais. Então se aplica GROUP BY e TER cláusulas:
USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING and GROUP BY
SELECT name, SUM( rent + tax) AS [Total Expenses]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Vamos analisar a saída. A primeira consulta exibe todos os detalhes dos funcionários com salários de $ 150.000 ou mais. Agora, observe o segundo resultado da consulta. Aqui, buscamos os funcionários e suas despesas com base no corte salarial, que é de $ 150.000 ou mais. Dessa forma, verificamos que nossa consulta com as cláusulas SUM, GROUP BY e HAVING retorna resultados corretos.

Caso de uso 5:função SQL SUM com várias expressões aritméticas


A função SUM oferece grande flexibilidade quando se trata de expressões aritméticas. Podemos usar várias expressões aritméticas, como adicionar ou subtrair entre vários valores de coluna quando necessário. Vamos nos referir a um exemplo.

Queremos fazer um relatório sobre a economia total de nossos funcionários. Pode haver várias colunas de despesas ou subsídios, como subsídio de aluguel de casa, subsídio de viagem, subsídio de refeição etc. Nossa tabela Empregado tem duas colunas relacionadas às despesas dos funcionários – o aluguel pago pela hospedagem e os impostos pagos ao governo. Você pode entender o conceito e aplicá-lo a mais colunas de maneira semelhante.
USE DBName
GO
--List table data for reference
SELECT *
FROM [dbo].[Employee]
GO

--SUM with multiple arithmetic expressions
SELECT name, SUM(salary – (rent + tax)) AS [Total Savings]
FROM [dbo].[Employee]
GROUP BY name
GO

A primeira consulta exibe todos os dados da tabela Funcionário . Usaremos esses dados como referência para verificar nossa saída real retornada pela segunda consulta sobre a economia total de cada funcionário.

Conseguimos isso adicionando todas as despesas e subtraindo todas as despesas do salário do funcionário, conforme indicado na SOMA declaração de função. Você pode verificá-lo calculando manualmente esses dados a partir do primeiro conjunto de resultados de qualquer funcionário para validá-lo.

Conclusão


Exploramos vários casos de uso da função SQL SUM com outras cláusulas. A propósito, ferramentas digitais modernas para especialistas em SQL Server podem simplificar drasticamente essas tarefas. Por exemplo, o dbForge SQL Complete inclui um recurso que pode calcular funções agregadas do conjunto de resultados prontos na grade de resultados do SSMS.

Você pode compartilhar suas dicas favoritas relacionadas à função SQL SUM. Você está convidado a usar a seção de comentários.