Inleiding tot GROUP BY-clausule in SQL
Voor de gevallen waarin we de rijen met dezelfde waarde moeten groeperen, komt de clausule Group by in beeld. De clausule GROUP BY is een opdracht in SQL waarmee deze bewerking wordt uitgevoerd.
Het belangrijke punt om te onthouden is dat de clausule GROUP BY wordt gebruikt in de SELECT-instructie in de query nadat de clausule WHERE is gebruikt.
Syntaxis
De syntaxis voor de Group By-clausule is -
SELECT column_name1, column_name2, …
FROM table_name
WHERE conditions
GROUP By column_name1, column_name2, …
ORDER By column_name1, column_name2, …;
Verklaring van de syntaxis
- SELECT-instructie - SQL-opdrachtquery
- tabelnaam - de naam van de databasetabel waarnaar wordt verwezen
- voorwaarden - raadpleeg de te controleren voorwaarden
- GROUP BY - clausule om dezelfde rijen bij elkaar te groeperen
- ORDER BY - altijd gebruikt na Group By-clausule voor het rangschikken van de rijen in oplopende of aflopende volgorde. Dit is een optionele voorwaarde.
Hoe GROUP BY-clausule werkt in SQL?
Laten we een voorbeeld nemen om de werking van de Group By-clausule te begrijpen. Overweeg een tabel met naam als WERKNEMER die de basisgegevens van de werknemer bevat, zoals naam, leeftijd, telefoonnummer, nummer, geslacht, adres, e-mailadres, enz.
Werknemers tabel
naam | leeftijd | telefoon | geslacht | |
John | 23 | 123 | Mannetje | |
mei | 22 | 456 | Vrouw | |
Ana | 45 | 644 | Vrouw | |
pannen | 57 | 3456 | Vrouw | |
Res | 45 | 456 | Vrouw | |
Bruinen | 78 | 2456 | Mannetje | |
Ran | 34 | 5899 | Mannetje | |
Wan | 55 | 7789 | Vrouw | |
Tung | 32 | 5689 | Mannetje | |
Chung | 21 | 4678 | Mannetje |
Overweeg dat de WERKNEMER ongeveer 10 inzendingen heeft.
Laten we eerst de verschillende waarden van 'geslacht' uit deze tabel halen. De vraag die ons helpt ons doel te bereiken is -
SELECT gender FROM EMPLOYEE;
Dit geeft ons de volgende waarden-
geslacht |
Mannetje |
Vrouw |
Vrouw |
Vrouw |
Vrouw |
Mannetje |
Mannetje |
Vrouw |
Mannetje |
Mannetje |
Het probleem hier is de redundantie van de waarden, dwz zoals we kunnen zien zijn er slechts twee unieke waarden van geslachten in de tabel, maar de uitvoer geeft ons niet alleen de unieke waarden, maar alle waarden, zelfs als ze repetitief zijn.
Dus, om alleen de unieke waarden uit de tabel te krijgen, zullen we de volgende query gebruiken -
SELECT gender FROM EMPLOYEE GROUP BY gender;
Het resultaat dat we ontvangen na het uitvoeren van deze zoekopdracht is -
geslacht |
Mannetje |
Vrouw |
De groep Door groepeert alle dezelfde waarden in de rijen samen en retourneert slechts één invoer of een enkele rij voor hen zoals bij de rijen "Man" en "Vrouw" in de tabel. Dit resulteerde in slechts twee unieke waarden die aanwezig waren in de kolom "geslacht" i, e. Vrouwelijk en mannelijk.
Laten we nu een ander voorbeeld nemen van een tabel met de details van de afdeling waaraan elk van deze medewerkers is gekoppeld. We noemen dit een Employee_Department-tabel.
Werknemer Afdeling Tabel
naam | mortelbak | afdeling |
John | hod1 | Onderhoud |
mei | hod2 | Financiën |
Ana | hod1 | Onderhoud |
pannen | hod2 | Financiën |
Res | hod3 | tech |
Bruinen | hod5 | Ondersteuning |
Ran | hod3 | Onderhoud |
Wan | hod3 | tech |
Tung | hod3 | Financiën |
Chung | hod5 | HR |
Laten we nu de onderstaande zoekopdracht uitvoeren en het resultaat zoeken -
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
De uitvoering van deze query haalt het volgende resultaat op:
mortelbak | afdeling |
hod1 | Onderhoud |
hod2 | Financiën |
hod3 | tech |
hod5 | Ondersteuning |
hod3 | Onderhoud |
hod3 | Financiën |
hod5 | HR |
De clausule GROUP BY werkt op zowel de hod als de afdeling om te zoeken naar de unieke rijen in het bovengenoemde scenario. Het zal de combinatie van hod en afdeling vergelijken met andere vermeldingen van de hod en afdeling om het unieke ervan te identificeren. Als de hod hetzelfde is, maar de afdeling anders is, wordt die rij als een unieke behandeld. Als de hod en de afdeling meer dan één rij hetzelfde zijn, wordt de dubbele invoer niet gemaakt en wordt slechts één rij weergegeven.
GROUP BY Clausule-activiteiten
We kunnen Group By-clausule gebruiken met verschillende groeperings- en aggregatiefuncties. Laten we een paar voorbeelden nemen met behulp van de twee bovengenoemde tabellen, namelijk WERKNEMER en Werknemer_afdeling.
Voorbeeld 1
Het aantal mannelijke en vrouwelijke werknemers in het bedrijf tellen.
SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;
De uitvoering van deze query haalt het volgende resultaat op:
COUNT ( 'name') | geslacht |
5 | Mannetje |
5 | Vrouw |
Voorbeeld 2
De telling van afdelingen in het bedrijf in aflopende volgorde van de telling krijgen.
SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;
De uitvoering van deze query haalt het volgende resultaat op:
COUNT ( 'name') | afdeling |
3 | Onderhoud |
3 | Financiën |
2 | tech |
1 | Ondersteuning |
1 | HR |
Voorbeeld 3
De telling van verschillende afdelingen onder dezelfde hod in het bedrijf krijgen in aflopende volgorde van de telling.
SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;
De uitvoering van deze query haalt het volgende resultaat op:
COUNT ( 'name') | mortelbak | afdeling |
2 | hod1 | Onderhoud |
2 | hod2 | Financiën |
2 | hod3 | tech |
1 | hod5 | Ondersteuning |
1 | hod3 | Onderhoud |
1 | hod3 | Financiën |
1 | hod5 | HR |
De clausule HAVING in SQL
Het gebruik van de clausule HAVING met de clausule Group By beperkt het resultaat van de query tot de rijen met de waarde die wordt vermeld met de clausule Have.
Als u dit begrijpt met een voorbeeld, wordt het eenvoudiger -
Voorbeeld 4
SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;
De uitvoering van deze query haalt het volgende resultaat op:
naam | leeftijd | telefoon | geslacht | |
mei | 22 | 456 | Vrouw | |
Ana | 45 | 644 | Vrouw | |
pannen | 57 | 3456 | Vrouw | |
Res | 45 | 456 | Vrouw | |
Wan | 55 | 7789 | Vrouw |
Voorbeeld 5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
De uitvoering van deze query haalt het volgende resultaat op:
naam | mortelbak | afdeling |
mei | hod2 | Financiën |
pannen | hod2 | Financiën |
Tung | hod3 | Financiën |
Conclusie
Met behulp van de GROUP BY-component met de SELECT-instructie kunnen we rijen met dezelfde waarden groeperen, samen met het gebruik van aggregatiefuncties, constanten en expressies.
Aanbevolen artikelen
Dit is een handleiding voor de GROUP BY-clausule in SQL. Hier bespreken we hoe GROUP BY-clausule in SQL werkt met behulp van voorbeelden en werknemer-tabellen. U kunt ook de volgende artikelen bekijken voor meer informatie -
- Query invoegen
- SQL-weergaven
- Database in SQL
- Transacties in SQL