Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare la funzione T-SQL di SQL Server SUM:5 casi d'uso

La funzione T-SQL SUM è una delle funzioni fondamentali. Il suo scopo è calcolare la somma di tutti i valori nella colonna specificata:tieni presente che si applica solo alle colonne numeriche.

Di seguito è riportata la sintassi di SQL SUM.

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

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • TUTTI è un valore predefinito, non obbligatorio da superare. Consente di restituire la somma di tutti i valori.
  • DISTINTA specifica che deve restituire solo la somma dei valori univoci, ignorando i valori duplicati.
  • Espressione è la categoria del tipo di dati numerico esatto o approssimativo, ad eccezione del bit tipo di dati.
  • OLTRE clausola con partition_by_clause e ordina_per_clausola serve per usare questa funzione su una partizione specifica.
    • partizione_per_clausola divide il set di risultati prodotto dalla clausola FROM in partizioni a cui viene applicata la funzione
    • ordina_per_clausola determina l'ordine logico in cui viene eseguita l'operazione.

Per dimostrare l'utilizzo della funzione SOMMA SQL, ho creato una tabella denominata Employee . Ha 5 colonne:nome , stipendio , affitto , tasse e natura occupazionale . I seguenti casi d'uso saranno al centro dell'attenzione:

  1. Utilizzo di base o semplice della funzione SOMMA
  2. Utilizzo di SUM con le espressioni CASE
  3. Utilizzo di SUM con l'istruzione GROUP BY
  4. Utilizzo di SUM con clausola HAVING
  5. Applicazione di SUM per espressioni aritmetiche multiple o complesse

Inoltre, impareremo altri casi d'uso come l'utilizzo di SUM con la clausola WHERE, la clausola ORDER BY o l'utilizzo di DISTINCT nella funzione SUM per ottenere la somma di valori univoci. Ma prima le cose.

Caso d'uso 1:semplice funzione SUM SQL

Come indicato sopra, ho una tabella denominata Employee con poche colonne. Supponiamo che la tua azienda voglia sapere quanto costo salariale stanno spendendo per tutti i dipendenti. Per ottenere il valore, devi solo aggiungere lo stipendio di tutti i dipendenti. SUM() ti semplificherà la vita, fornendo rapidamente tali rapporti.

Useremo la funzione SUM() sullo stipendio colonna e l'output sarà il costo salariale totale speso per tutti i dipendenti dell'azienda:

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

Se nella colonna è presente un valore NULL, questa funzione lo ignorerà e procederà con il valore della riga successiva. Pertanto, potresti avere NULL per qualsiasi dipendente che ha lasciato l'organizzazione:l'azienda non sta pagando nulla a quella risorsa.

Puoi vedere l'output di seguito:mostra l'importo di $ 885000 spesi per gli stipendi dei dipendenti:

Se sono presenti duplicati valori su qualsiasi colonna e vuoi ottenere la somma di tutti gli unici valori, puoi utilizzare DISTINCT argomento:

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

Ho eseguito entrambe le istruzioni insieme. Innanzitutto, era quello del passaggio precedente con tutti i valori salariali. Il secondo riguardava i valori univoci:utilizzava DISTINCT argomento.

Dai un'occhiata allo screenshot qui sotto:mostra gli output di entrambe le istruzioni e sono diversi. Quando uso la funzione SOMMA per tutti i valori per impostazione predefinita, l'output è $ 885000. Quando utilizzo DISTINCT argomento per ottenere solo la somma dei valori univoci, l'output è $ 65000.

Pertanto, abbiamo valori simili in questa colonna. in termini commerciali, significa che abbiamo pochi dipendenti che percepiscono gli stessi importi del loro stipendio.

Questo esempio mostra l'uso di DISTINCT argomento per ottenere la somma di tutti i valori univoci. In pratica, ci consente di evitare valori duplicati dal risultato finale.

Possiamo anche usare il WHERE clausola in SQL SUM(). Supponiamo che la tua azienda voglia ottenere il costo totale che spende per i dipendenti che ricevono più di $ 100000 di stipendio e non un dipendente a tempo indeterminato per comprendere la distribuzione dei costi. Il DOVE La clausola filtrerà il risultato e fornirà il costo totale in base ai requisiti aziendali.

Nella seguente istruzione T-SQL, puoi vedere WHERE clausola aggiunta sulla natura dell'occupazione colonna. Questa colonna conserva un registro di ogni dipendente, sia che si tratti di dipendenti a tempo indeterminato che a contratto.

Nota che ho utilizzato l'operatore AND per club entrambi i requisiti:

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

L'output mostra che l'azienda spende $ 240.000 per quei dipendenti che ricevono $ 100.000 o più e non per dipendenti a tempo indeterminato.

Usa il caso 2:funzione SQL SUM con espressioni CASE

Nel nostro scenario, vogliamo sapere quanti dipendenti lavorano a tempo indeterminato insieme agli altri loro dettagli. per ottenere questo risultato, possiamo utilizzare il CASE espressione in SUM() funzione. Tuttavia, puoi facilmente ottenere questo risultato semplicemente mettendo DOVE clausola, a volte hai bisogno di CASE e SOMMA in un requisito di query complesso.

Dai un'occhiata alla seguente istruzione T-SQL con CASE espressione all'interno di SUM() funzione:

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

L'output delle dichiarazioni di cui sopra mostra 4:l'azienda ha solo 4 dipendenti a tempo indeterminato secondo i loro registri nel Dipendente tabella.

Prendiamo un altro esempio di CASE con SOMMA () .

Durante l'esplorazione del caso d'uso 1, abbiamo trovato i costi totali spesi per i dipendenti a contratto che ricevono $ 100000 o più nella sezione precedente del caso d'uso 1. Ora, vogliamo trovare il numero di tali dipendenti. E il CASO l'espressione verrà nuovamente visualizzata.

Possiamo usare CASE nella stessa istruzione T-SQL usata in precedenza. Di seguito è riportato l'esempio:

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

L'output mostra 2 appaltatori che lavorano e ottengono più di $ 100000.

Puoi utilizzare vari aspetti del CASE espressione in SELECT dichiarazione insieme a SUM() funzione per soddisfare le tue esigenze aziendali.

Caso d'uso 3:funzione SQL SUM con GROUP BY

Supponiamo che la nostra azienda voglia sapere quanti soldi spende in totale per i suoi dipendenti a tempo indeterminato e quanti soldi spende per i dipendenti a contratto. Possiamo ottenere questo set di risultati utilizzando SUM funzione insieme a GRUPPO PER dichiarazione.

Guarda la seguente istruzione T-SQL. Ho usato il GRUPPO PER dichiarazione sulla natura dell'occupazione colonna e applicato la funzione SOMMA sullo Stipendio colonna per ottenere lo stipendio totale di ogni tipo di dipendente classificato in base alla sua natura occupazionale.

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

Il set di risultati fornisce il denaro totale speso per appaltatori e dipendenti a tempo indeterminato. Se aggiungi entrambi questi numeri, la loro somma sarà il totale dei soldi spesi per lo stipendio dei loro dipendenti (confronta questo numero con il primo screenshot di questo articolo).

USE Caso 4:funzione SQL SUM con istruzione HAVING

Ora esploreremo l'utilizzo della funzione SOMMA con le istruzioni HAVING e GROUP BY insieme. Il nostro esempio mostrerà l'elenco dei dipendenti che ricevono più di $ 150000 all'anno. Possiamo ottenerlo semplicemente usando l'istruzione SELECT con la clausola WHERE, ma ti mostrerò come ottenere lo stesso risultato con HAVING, GROUP BY e SUM.

Ci sono 2 script T-SQL. L'output di entrambe le istruzioni è lo stesso, ma il primo script utilizza una semplice istruzione SELECT, mentre il secondo codice utilizza la funzione SUM insieme alle clausole 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

Vedi gli output di entrambi gli script:

C'è un altro aspetto dell'uso di queste affermazioni. Ho passato le espressioni aritmetiche nella funzione SUM per ottenere il affitto e tasse spese dei dipendenti. Quindi, ho applicato GRUPPO PER e AVERE dichiarazioni sullo Stipendio colonna. In parole semplici, volevo conoscere l'affitto totale e le spese fiscali spese dai dipendenti con uno stipendio di $ 150000 o più.

Ho anche usato due query. Il primo elenca i dettagli di tutti i dipendenti che ricevono $ 150000 o più. Questo output viene recuperato solo per la convalida e la verifica. Il secondo utilizza la SOMMA funzione su due colonne (affitto e tasse ) come spese totali. Quindi si applica GRUPPO PER e AVERE clausole:

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

Analizziamo l'output. La prima query mostra tutti i dettagli dei dipendenti con stipendi di $ 150000 o più. Ora, guarda il secondo risultato della query. Qui, abbiamo recuperato i dipendenti e le loro spese in base al taglio dello stipendio che è di $ 150000 o più. In questo modo, abbiamo verificato che la nostra query con le clausole SUM, GROUP BY e HAVING restituisca risultati corretti.

Caso d'uso 5:funzione SQL SUM con espressioni aritmetiche multiple

La funzione SOMMA offre una grande flessibilità quando si tratta di espressioni aritmetiche. Possiamo utilizzare più espressioni aritmetiche, come l'aggiunta o la sottrazione tra più valori di colonna quando necessario. Facciamo un esempio.

Vogliamo tirare un rapporto sui risparmi totali dei nostri dipendenti. Possono esserci varie colonne di spese o indennità, come indennità per l'affitto della casa, indennità di viaggio, indennità per i pasti, ecc. La nostra tabella Dipendente ha due colonne relative alle spese dei dipendenti:l'affitto pagato per l'alloggio e le tasse pagate al governo. Puoi comprendere il concetto e applicarlo a più colonne in modo simile.

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 prima query mostra tutti i dati della tabella Impiegato . Utilizzeremo questi dati come riferimento per verificare il nostro output effettivo restituito dalla seconda query sul risparmio totale per ciascun dipendente.

Lo abbiamo ottenuto sommando tutte le spese e poi sottraendo tutte le spese dallo stipendio del dipendente come indicato nella SOMMA istruzione di funzione. Puoi verificarlo calcolando manualmente questi dati dal primo set di risultati affinché qualsiasi dipendente lo convalidi.

Conclusione

Abbiamo esplorato più casi d'uso della funzione SOMMA SQL con altre clausole. A proposito, i moderni strumenti digitali per gli specialisti di SQL Server possono semplificare drasticamente queste attività. Ad esempio, dbForge SQL Complete include una funzionalità in grado di calcolare funzioni aggregate dal set di risultati pronto nella griglia dei risultati SSMS.

Potresti condividere i tuoi suggerimenti preferiti relativi alla funzione SOMMA SQL. Puoi utilizzare la sezione Commenti.