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

Come filtrare i record con la funzione di aggregazione SUM

Problema:

Devi trovare le righe in cui i gruppi hanno una somma di valori in una colonna inferiore a un determinato valore.

Esempio:

Il nostro database ha una tabella denominata company con i dati nelle seguenti colonne:id , department , first_name , last_name e salary .

id reparto nome cognome stipendio
1 marketing Lora Marrone 2300
2 finanza Giovanni Jackson 3200
3 marketing Michele Thomson 1270
4 produzione Tony Mugnaio 6500
5 produzione Sally Verde 2500
6 finanza Olivier Nero 3450
7 produzione Jennifer Michelin 2800
8 marketing Jeremy Lorson 3600
9 marketing Luigi Fabio 4200

Troviamo i nomi dei reparti che hanno somme degli stipendi dei suoi dipendenti inferiori a 7000.

Soluzione:

SELECT department, SUM(salary)
FROM company
GROUP BY department
HAVING SUM(salary)<7000;

Ecco il risultato:

dipartimento somma
finanza 6550

Discussione:

Per filtrare i record utilizzando la funzione di aggregazione (la funzione SUM di prima), utilizzare la clausola HAVING. Per calcolare la somma dei valori per ogni gruppo di righe, utilizzare la funzione SOMMA di aggregazione. In questa query, il reparto colonne viene calcolato con la somma di tutti gli stipendi dei suoi dipendenti come gruppo (calcolalo con la funzione SOMMA con lo stipendio colonna come argomento). Poiché si calcola il valore per ogni gruppo di righe (raggruppiamo le righe in base al nome del dipartimento), la query ha una clausola GROUP BY con il nome della colonna per raggruppare le righe (nel nostro esempio, GROUP BY department ). L'ultimo passaggio consiste nell'usare la funzione di aggregazione nella clausola HAVING. Ricorda, HAVING dovrebbe essere inserito dopo la clausola GROUP BY. HAVING contiene la condizione che confronta il valore restituito dalla funzione di aggregazione con un dato valore. Dall'alto, sono le somme salariali con un valore inferiore a 7000 (SUM(salary)<7000 ). Qui verifichiamo che la somma salariale in ciascun dipartimento sia inferiore a 7000. La query mostrava solo un dipartimento, finanza, con stipendi di 6550.