La fonction T-SQL SUM est l'une des fonctions fondamentales. Son but est de calculer la somme de toutes les valeurs dans la colonne spécifiée - notez qu'il s'applique uniquement aux colonnes numériques.
Vous trouverez ci-dessous la syntaxe de SQL SUM.
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
- TOUS est une valeur par défaut, non obligatoire à transmettre. Il permet de renvoyer la somme de toutes les valeurs.
- DISTINCT spécifie qu'il doit renvoyer la somme des valeurs uniques uniquement, en ignorant les valeurs en double.
- Expression est la catégorie de type de données numérique exacte ou approximative, à l'exception du bit Type de données.
- TERMINÉ clause avec partition_by_clause et order_by_clause sert à utiliser cette fonction sur une partition spécifique.
- partition_by_clause divise le jeu de résultats produit par la clause FROM en partitions auxquelles la fonction est appliquée
- order_by_clause détermine l'ordre logique dans lequel l'opération est effectuée.
Pour démontrer l'utilisation de la fonction SQL SUM, j'ai créé une table nommée Employee . Il a 5 colonnes - nom , salaire , location , taxe , et nature de l'emploi . Les cas d'utilisation suivants seront mis en avant :
- Utilisation de base ou simple de la fonction SOMME
- Utilisation de SUM avec des expressions CASE
- Utilisation de SUM avec l'instruction GROUP BY
- Utilisation de SUM avec la clause HAVING
- Appliquer SUM pour des expressions arithmétiques multiples ou complexes
Nous apprendrons également d'autres cas d'utilisation, tels que l'utilisation de SUM avec la clause WHERE, la clause ORDER BY ou l'utilisation de DISTINCT dans la fonction SUM pour obtenir la somme de valeurs uniques. Mais avant tout.
Cas d'utilisation 1 :Fonction SOMME SQL simple
Comme indiqué ci-dessus, j'ai une table nommée Employee avec peu de colonnes. Supposons que votre entreprise souhaite connaître le coût salarial qu'elle dépense pour tous les employés. Pour obtenir la valeur, il vous suffit d'ajouter le salaire de tous les employés. SUM () vous facilitera la vie en fournissant ces rapports rapidement.
Nous allons utiliser la fonction SOMME () sur le salaire et le résultat sera le coût salarial total dépensé pour tous les employés de l'entreprise :
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
Si vous avez une valeur NULL dans la colonne, cette fonction l'ignorera et passera à la valeur de ligne suivante. Ainsi, vous pouvez avoir NULL pour tout employé qui a quitté l'organisation - l'entreprise ne paie rien à cette ressource.
Vous pouvez voir le résultat ci-dessous :il indique le montant de 885 000 USD dépensé pour les salaires des employés :
S'il y a des doublons valeurs sur n'importe quelle colonne, et vous voulez obtenir la somme de toutes les valeurs uniques valeurs, vous pouvez utiliser le DISTINCT argument :
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
J'ai exécuté les deux déclarations ensemble. D'abord, c'était celui de l'étape précédente avec toutes les valeurs salariales. La seconde était pour les valeurs uniques - elle utilisait le DISTINCT arguments.
Jetez un œil à la capture d'écran ci-dessous - elle montre les sorties des deux déclarations, et elles sont différentes. Lorsque j'utilise la fonction SOMME pour toutes les valeurs par défaut, la sortie est de 885 000 $. Lorsque j'utilise le DISTINCT argument pour obtenir la somme des valeurs uniques uniquement, la sortie est de 65 000 $.
Ainsi, nous avons des valeurs similaires dans cette colonne. en termes commerciaux, cela signifie que nous avons peu d'employés qui reçoivent les mêmes montants que leur salaire.
Cet exemple montre l'utilisation de DISTINCT argument pour obtenir la somme de toutes les valeurs uniques. En pratique, cela nous permet d'éviter les valeurs en double du résultat final.
Nous pouvons également utiliser le WHERE clause dans SQL SOMME (). Supposons que votre entreprise souhaite obtenir le coût total qu'elle dépense pour les employés qui reçoivent plus de 100 000 $ en salaire, et non un employé permanent pour comprendre la répartition des coûts. Le OÙ La clause filtrera le résultat et fournira le coût total selon les besoins de l'entreprise.
Dans l'instruction T-SQL ci-dessous, vous pouvez voir WHERE clause ajoutée sur la nature de l'emploi colonne. Cette colonne enregistre chaque employé, qu'il soit permanent ou contractuel.
Notez que j'ai utilisé l'opérateur AND pour associer les deux exigences :
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO
Le résultat montre que l'entreprise dépense 240 000 $ pour les employés qui reçoivent 100 000 $ ou plus, et non pour les employés permanents.
Cas d'utilisation 2 :Fonction SQL SUM avec expressions CASE
Dans notre scénario, nous voulons savoir combien d'employés travaillent en tant que permanents ainsi que leurs autres détails. pour obtenir ce résultat, nous pouvons utiliser le CASE expression dans la SOMME () une fonction. Cependant, vous pouvez facilement obtenir ce résultat en mettant simplement OÙ clause, parfois vous avez besoin de CASE et SOMME dans une exigence de requête complexe.
Jetez un œil à l'instruction T-SQL ci-dessous avec le CASE expression à l'intérieur de la SOMME () fonction :
--USE SUM function with CASE expression
SELECT
SUM(
CASE
WHEN [Employment Nature] = ‘Permanent’ THEN 1
ELSE 0
END) As [Total Employees],
FROM [dbo].[Employee]
La sortie des déclarations ci-dessus montre 4 - l'entreprise n'a que 4 employés permanents selon leurs enregistrements dans le Employé tableau.
Prenons un autre exemple de CASE avec SOMME () .
Lors de l'exploration du cas d'utilisation 1, nous avons trouvé les coûts totaux dépensés pour les employés contractuels qui reçoivent 100 000 $ ou plus dans la section ci-dessus sous le cas d'utilisation 1. Maintenant, nous voulons trouver le nombre de ces employés. Et, le CAS l'expression reviendra à l'image.
Nous pouvons utiliser CASE dans la même instruction T-SQL utilisée auparavant. Ci-dessous l'exemple :
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
La sortie nous montre 2 entrepreneurs travaillant et obtenant plus de 100 000 $.
Vous pouvez utiliser divers aspects du CASE expression dans le SELECT déclaration avec la SOMME () fonction pour répondre aux besoins de votre entreprise.
Cas d'utilisation 3 :Fonction SQL SUM avec GROUP BY
Supposons que notre entreprise veuille savoir combien d'argent au total elle dépense pour ses employés permanents et combien d'argent elle dépense pour ses employés contractuels. Nous pouvons obtenir cet ensemble de résultats en utilisant le SUM fonction avec GROUPER PAR déclaration.
Regardez l'instruction T-SQL ci-dessous. J'ai utilisé le GROUP BY déclaration sur la nature de l'emploi colonne et appliqué la fonction SOMME sur le Salaire pour obtenir le salaire total de chaque type d'employé classé en fonction de sa nature d'emploi.
USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]
L'ensemble de résultats fournit le montant total dépensé pour les sous-traitants et les employés permanents. Si vous additionnez ces deux nombres, leur somme sera l'argent total dépensé pour le salaire de leurs employés (comparez ce nombre avec la première capture d'écran de cet article).
CAS D'UTILISATION 4 :Fonction SQL SUM avec instruction HAVING
Maintenant, nous allons explorer l'utilisation de la fonction SUM avec les instructions HAVING et GROUP BY ensemble. Notre exemple affichera la liste des employés qui reçoivent plus de 150 000 $ par année. Nous pouvons l'obtenir en utilisant simplement l'instruction SELECT avec la clause WHERE, mais je vais vous montrer comment obtenir le même résultat avec HAVING, GROUP BY et SUM.
Il existe 2 scripts T-SQL. La sortie des deux instructions est la même, mais le premier script utilise une simple instruction SELECT, tandis que le second code utilise la fonction SUM avec les clauses GROUP BY et 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
Voir les sorties des deux scripts :
Il y a un autre aspect de l'utilisation de ces déclarations. J'ai passé des expressions arithmétiques dans la fonction SOMME pour obtenir le rent et taxe dépenses des employés. Ensuite, j'ai appliqué GROUPER PAR et AVOIR déclarations sur le salaire colonne. En termes simples, je voulais connaître le total des loyers et des dépenses fiscales dépensés par les employés ayant un salaire de 150 000 $ ou plus.
J'ai également utilisé deux requêtes. Le premier répertorie les détails de tous les employés qui reçoivent 150 000 $ ou plus. Cette sortie est récupérée uniquement à des fins de validation et de vérification. Le second utilise la SOMME fonction sur deux colonnes (loyer et taxe ) comme leurs dépenses totales. Alors s'applique GROUPER PAR et AVOIR clauses :
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
Analysons la sortie. La première requête affiche tous les détails des employés avec des salaires de 150 000 $ ou plus. Maintenant, regardez le deuxième résultat de la requête. Ici, nous avons récupéré les employés et leurs dépenses en fonction de leur seuil de salaire qui est de 150 000 $ ou plus. De cette façon, nous avons vérifié que notre requête avec les clauses SUM, GROUP BY et HAVING renvoie des résultats corrects.
Cas d'utilisation 5 :Fonction SQL SUM avec plusieurs expressions arithmétiques
La fonction SOMME offre une grande flexibilité lorsqu'il s'agit d'expressions arithmétiques. Nous pouvons utiliser plusieurs expressions arithmétiques, telles que l'addition ou la soustraction entre plusieurs valeurs de colonne si nécessaire. Prenons un exemple.
Nous voulons produire un rapport sur les économies totales de nos employés. Il peut y avoir différentes colonnes de dépenses ou d'indemnités, telles que l'allocation de logement, les indemnités de déplacement, l'indemnité de repas, etc. Notre tableau Employé a deux colonnes liées aux dépenses des employés - le loyer payé pour le logement et les taxes payées au gouvernement. Vous pouvez comprendre le concept et l'appliquer à plus de colonnes de la même manière.
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 première requête affiche toutes les données de la table Employé . Nous utiliserons ces données comme référence pour vérifier notre sortie réelle renvoyée par la deuxième requête sur les économies totales pour chaque employé.
Nous l'avons obtenu en ajoutant toutes les dépenses, puis en soustrayant toutes les dépenses du salaire de l'employé comme indiqué dans la SOMME énoncé de fonction. Vous pouvez le vérifier en calculant manuellement ces données à partir du premier ensemble de résultats pour tout employé afin de le faire valider.
Conclusion
Nous avons exploré plusieurs cas d'utilisation de la fonction SQL SUM avec d'autres clauses. Soit dit en passant, les outils numériques modernes pour les spécialistes de SQL Server peuvent simplifier considérablement ces tâches. Par exemple, dbForge SQL Complete inclut une fonctionnalité qui peut calculer des fonctions d'agrégation à partir du jeu de résultats prêt dans la grille de résultats SSMS.
Vous pouvez partager vos conseils préférés liés à la fonction SQL SUM. Vous êtes invités à utiliser la section Commentaires.