sql >> Database >  >> RDS >> Database

Records filteren met geaggregeerde functie SUM

Probleem:

U moet rijen vinden waarin groepen een som van waarden in één kolom hebben die kleiner zijn dan een bepaalde waarde.

Voorbeeld:

Onze database heeft een tabel met de naam company met gegevens in de volgende kolommen:id , department , first_name , last_name , en salary .

id afdeling voornaam achternaam salaris
1 marketing Lora Bruin 2300
2 financiën Jan Jackson 3200
3 marketing Michael Thomson 1270
4 productie Tony Miller 6500
5 productie Sally Groen 2500
6 financiën Olivier Zwart 3450
7 productie Jeniffer Michelin 2800
8 marketing Jeremy Lorson 3600
9 marketing Louis Smith 4200

Laten we de namen zoeken van afdelingen die een salaris van minder dan 7000 werknemers hebben.

Oplossing:

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

Dit is het resultaat:

afdeling som
financiën 6550

Discussie:

Gebruik de HAVING-component om records te filteren met de aggregatiefunctie (de functie SUM van eerder). Gebruik de aggregatiefunctie SOM om de som van de waarden voor elke groep rijen te berekenen. In deze query wordt de kolom afdeling berekend met de som van alle salarissen van zijn medewerkers als groep (bereken deze met de functie SOM met de kolom salaris als argument). Omdat u de waarde voor elke groep rijen berekent (we groeperen rijen op basis van de naam van de afdeling), heeft de query een GROUP BY-clausule met de naam van de kolom om rijen te groeperen (in ons voorbeeld GROUP BY department ). De laatste stap is het gebruik van de aggregatiefunctie in de HAVING-clausule. Onthoud dat HAVING achter de GROUP BY-clausule moet worden geplaatst. HAVING bevat de voorwaarde die de waarde vergelijkt die wordt geretourneerd door de aggregatiefunctie met een bepaalde waarde. Van bovenaf zijn het de salarissommen met een waarde kleiner dan 7000 (SUM(salary)<7000 ). Hier controleren we of het salarisbedrag in elke afdeling lager is dan 7000. De zoekopdracht toonde slechts één afdeling, financiën, met salarissen van 6550.


  1. De Azure-kloof overbruggen:beheerde instanties

  2. Gebruik TYPE_NAME() om de naam van een gegevenstype in SQL Server op te halen

  3. Resultaten beperken in T-SQL

  4. Kan kolom dbo of de door de gebruiker gedefinieerde functie of geaggregeerde dbo.Splitfn niet vinden, of de naam is dubbelzinnig