sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo usar la función SUM de SQL Server T-SQL:5 casos de uso

La función T-SQL SUM es una de las funciones fundamentales. Su propósito es calcular la suma de todos los valores en la columna especificada; tenga en cuenta que solo se aplica a las columnas numéricas.

A continuación se muestra la sintaxis de SQL SUM.

-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )  

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • TODOS es un valor predeterminado, no obligatorio para pasar. Permite devolver la suma de todos los valores.
  • DISTINTO especifica que tiene que devolver la suma de valores únicos únicamente, ignorando los valores duplicados.
  • Expresión es la categoría de tipo de datos numéricos exactos o aproximados, excepto el bit tipo de datos.
  • CAMBIO Cláusula con partition_by_clause y order_by_clause es para usar esta función en una partición específica.
    • partición_por_cláusula divide el conjunto de resultados producido por la cláusula FROM en particiones a las que se aplica la función
    • pedir_por_cláusula determina el orden lógico en el que se realiza la operación.

Para demostrar el uso de la función SQL SUM, he creado una tabla llamada Employee . Tiene 5 columnas:nombre , salario , alquilar , impuestos y naturaleza del empleo . Los siguientes casos de uso estarán en el foco:

  1. Uso básico o simple de la función SUM
  2. Uso de SUM con expresiones CASE
  3. Uso de SUM con instrucción GROUP BY
  4. Uso de SUM con la cláusula HAVING
  5. Aplicar SUM para expresiones aritméticas múltiples o complejas

Además, aprenderemos otros casos de uso, como usar SUM con la cláusula WHERE, la cláusula ORDER BY o usar DISTINCT en la función SUM para obtener la suma de valores únicos. Pero lo primero es lo primero.

Caso de uso 1:función SQL SUM simple

Como se indicó anteriormente, tengo una tabla llamada Employee con pocas columnas. Suponga que su empresa quiere saber cuánto costo de salario están gastando en todos los empleados. Para obtener el valor, solo necesita agregar el salario de todos los empleados. SUM () le hará la vida más fácil, proporcionando dichos informes rápidamente.

Usaremos la función SUM () en el salary columna, y el resultado será el costo salarial total gastado en todos los empleados de la empresa:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]

Si tiene algún valor NULL en la columna, esta función lo ignorará y continuará con el valor de la siguiente fila. Por lo tanto, puede tener NULL para cualquier empleado que abandonó la organización:la empresa no paga nada por ese recurso.

Puede ver el resultado a continuación:muestra la cantidad de $885 000 gastados en los salarios de los empleados:

Si hay duplicados valores en cualquier columna y desea obtener la suma de todos los valores únicos valores, puede utilizar 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

He ejecutado ambas declaraciones juntas. Primero, era el del paso anterior con todos los valores salariales. El segundo era para valores únicos:usaba DISTINCT argumento.

Eche un vistazo a la siguiente captura de pantalla:muestra los resultados de ambas declaraciones y son diferentes. Cuando uso la función SUMA para todos los valores de forma predeterminada, la salida es $885000. Cuando estoy usando DISTINCT argumento para obtener la suma de valores únicos solamente, la salida es $65000.

Por lo tanto, tenemos valores similares en esta columna. en términos comerciales, significa que tenemos pocos empleados que reciben las mismas cantidades que su salario.

Este ejemplo demuestra el uso de DISTINCT argumento para obtener la suma de todos los valores únicos. En la práctica, nos permite evitar valores duplicados del resultado final.

También podemos usar el DÓNDE cláusula en SQL SUM(). Digamos que su empresa quiere obtener el costo total que gasta para los empleados que reciben más de $ 100000 como salario, y no un empleado permanente para comprender la distribución de costos. El DÓNDE La cláusula filtrará el resultado y proporcionará el costo total según los requisitos comerciales.

En la siguiente instrucción T-SQL, puede ver el DÓNDE cláusula añadida en la Naturaleza del Empleo columna. Esta columna lleva un registro de cada empleado, ya sean empleados permanentes o por contrato.

Tenga en cuenta que he usado el operador AND para agrupar ambos requisitos:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

El resultado muestra que la empresa gasta $240 000 en aquellos empleados que reciben $100 000 o más, y no en empleados permanentes.

Caso de uso 2:función SQL SUM con expresiones CASE

En nuestro escenario, queremos saber cuántos empleados están trabajando como permanentes junto con sus otros detalles. para obtener este resultado, podemos usar CASE expresión en SUM () función. Aunque puede obtener fácilmente este resultado simplemente poniendo DÓNDE cláusula, a veces necesita CASE y SUMA en un requisito de consulta complejo.

Eche un vistazo a la declaración T-SQL a continuación con CASE expresión dentro de SUM () función:

--USE SUM function with CASE expression
SELECT 
SUM(
CASE
  WHEN [Employment Nature] = ‘Permanent’ THEN 1 
  ELSE 0 
  END) As [Total Employees],
   FROM [dbo].[Employee]

El resultado de las declaraciones anteriores muestra 4:la empresa tiene solo 4 empleados permanentes según sus registros en Empleado mesa.

Tomemos otro ejemplo de CASO con SUMA () .

Mientras exploramos el caso de uso 1, encontramos los costos totales gastados en empleados contractuales que reciben $100 000 o más en la sección anterior bajo el caso de uso 1. Ahora, queremos encontrar la cantidad de dichos empleados. Y, el CASO la expresión volverá a aparecer en la imagen.

Podemos usar CASE en la misma instrucción T-SQL utilizada anteriormente. A continuación se muestra el ejemplo:

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

El resultado nos muestra 2 contratistas trabajando y obteniendo más de $100 000.

Puede utilizar varios aspectos del CASE expresión en SELECT instrucción junto con SUM () para satisfacer las necesidades de su negocio.

Caso de uso 3:función SQL SUM con GROUP BY

Supongamos que nuestra empresa quiere saber cuánto dinero gasta en total en sus empleados permanentes y cuánto dinero gasta en empleados contractuales. Podemos obtener este conjunto de resultados usando SUM función junto con GROUP BY declaración.

Mire la declaración T-SQL a continuación. He usado el GROUP BY declaración sobre la naturaleza del empleo columna y aplicó la función SUMA en el Salario columna para obtener el salario total de cada tipo de empleado categorizado según su naturaleza de empleo.

USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]

El conjunto de resultados proporciona el dinero total gastado en contratistas y empleados permanentes. Si suma ambos números, su suma será el dinero total gastado en el salario de sus empleados (compare este número con la primera captura de pantalla de este artículo).

Caso de USO 4:Función SQL SUM con sentencia HAVING

Ahora, exploraremos el uso de la función SUM con declaraciones HAVING y GROUP BY juntas. Nuestro ejemplo mostrará la lista de empleados que reciben más de $150 000 por año. Podemos obtenerlo simplemente usando la instrucción SELECT con la cláusula WHERE, pero le mostraré cómo obtener el mismo resultado con HAVING, GROUP BY y SUM.

Hay 2 scripts T-SQL. El resultado de ambas declaraciones es el mismo, pero el primer script usa una declaración SELECT simple, mientras que el segundo código usa la función SUM junto con las cláusulas GROUP BY y 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

Vea los resultados de ambos scripts:

Hay otro aspecto del uso de estas declaraciones. He pasado expresiones aritméticas en la función SUMA para obtener el alquiler y impuestos gastos de los empleados. Luego, apliqué GROUP BY y TENER declaraciones sobre el Salario columna. En palabras simples, quería saber el total de los gastos de alquiler e impuestos gastados por los empleados con un salario de $150 000 o más.

También usé dos consultas. La primera lista los detalles de todos los empleados que reciben $150000 o más. Esta salida se obtiene solo para validación y verificación. El segundo usa el SUM función en dos columnas (rent y impuestos ) como sus gastos totales. Entonces se aplica GROUP BY y TENER 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

Analicemos la salida. La primera consulta muestra todos los detalles de los empleados con salarios de $150 000 o más. Ahora, mire el segundo resultado de la consulta. Aquí, hemos obtenido los empleados y sus gastos en función de su límite salarial, que es de $150 000 o más. De esta forma, hemos verificado que nuestra consulta con las cláusulas SUM, GROUP BY y HAVING arroja resultados correctos.

Caso de uso 5:Función SQL SUM con múltiples expresiones aritméticas

La función SUMA ofrece una gran flexibilidad cuando se trata de expresiones aritméticas. Podemos usar múltiples expresiones aritméticas, como sumar o restar entre múltiples valores de columna cuando sea necesario. Veamos un ejemplo.

Queremos sacar un informe sobre los ahorros totales de nuestros empleados. Puede haber varias columnas de gastos o asignaciones, como asignación de alquiler de vivienda, asignación de viaje, asignación de comida, etc. Nuestra tabla Empleado tiene dos columnas relacionadas con los gastos de los empleados:el alquiler pagado por el alojamiento y los impuestos pagados al gobierno. Puede comprender el concepto y aplicarlo a más columnas de manera similar.

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

La primera consulta muestra todos los datos de la tabla Empleado . Usaremos estos datos como referencia para verificar nuestro resultado real devuelto por la segunda consulta sobre el ahorro total para cada empleado.

Obtuvimos esto sumando todos los gastos y luego restando todos los gastos del salario del empleado como se indica en la SUMA. declaración de función. Puede verificarlo calculando manualmente estos datos del primer conjunto de resultados para que cualquier empleado lo valide.

Conclusión

Hemos explorado múltiples casos de uso de la función SQL SUM con otras cláusulas. Por cierto, las modernas herramientas digitales para especialistas en SQL Server pueden simplificar drásticamente estas tareas. Por ejemplo, dbForge SQL Complete incluye una función que puede calcular funciones agregadas a partir del conjunto de resultados listos en la cuadrícula de resultados de SSMS.

Puede compartir sus consejos favoritos relacionados con la función SQL SUM. Le invitamos a utilizar la sección Comentarios.