MySQL
Groeperen op
Zoeken…
Syntaxis
- SELECT expression1, expression2, ... expression_n,
- aggregate_function (expressie)
- VAN tabellen
- [WAAR voorwaarden]
- GROEPEN op expression1, expression2, ... expression_n;
parameters
Parameter | DETAILS |
---|---|
expression1, expression2, ... expression_n | De uitdrukkingen die niet zijn ingekapseld binnen een geaggregeerde functie en moeten worden opgenomen in de clausule GROUP BY. |
aggregate_function | Een functie zoals SOM-, AANTAL-, MIN-, MAX- of AVG-functies. |
tafels | hij tabellen waarvan u records wilt ophalen. Er moet ten minste één tabel worden vermeld in de clausule FROM. |
WAAR voorwaarden | Optioneel. De voorwaarden waaraan moet worden voldaan om de records te kunnen selecteren. |
Opmerkingen
De clausule MySQL GROUP BY wordt in een SELECT-instructie gebruikt om gegevens over meerdere records te verzamelen en de resultaten te groeperen op een of meer kolommen.
Het gedrag wordt gedeeltelijk bepaald door de waarde van de variabele ONLY_FULL_GROUP_BY
. Als dit is ingeschakeld, geven SELECT
instructies die groeperen op een kolom die zich niet in de uitvoer bevindt, een fout. ( Dit is de standaardwaarde vanaf 5.7.5 .) Zowel het instellen als het niet instellen van deze variabele kan problemen veroorzaken voor naïeve gebruikers of gebruikers die gewend zijn aan andere DBMS's.
GROEPEN DOOR DE SOM-functie TE GEBRUIKEN
SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;
Groeperen met behulp van de MIN-functie
Stel een tabel met werknemers waarin elke rij een werknemer is met een name
, een department
en een salary
.
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;
Dit zou u vertellen op welke afdeling de werknemer met het laagste salaris staat en wat dat salaris is. Het vinden van de name
van de werknemer met het laagste salaris in elke afdeling is een ander probleem, buiten het bestek van dit voorbeeld. Zie "groepsgewijs max".
GROEPEN OP GEBRUIK VAN TELLING Functie
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;
GROEPEN DOOR HAVING te gebruiken
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
GROUP BY ... HAVING
Geaggregeerde records filteren is analoog aan het gebruik van SELECT ... WHERE
om individuele records te filteren.
Je zou ook kunnen zeggen HAVING Man_Power >= 10
sinds HAVING
begrijpt "aliassen".
Groeperen met Groep Concat
Groep Concat wordt gebruikt in MySQL om aaneengeschakelde waarden van expressies te krijgen met meer dan één resultaat per kolom. Dit betekent dat er veel rijen moeten worden geselecteerd voor één kolom, zoals Name(1):Score(*)
Naam | partituur |
---|---|
Adam | A + |
Adam | EEN- |
Adam | B |
Adam | C + |
Bill | D- |
John | EEN- |
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM Grade
GROUP BY Name
resultaten:
+------+------------+
| Name | Grades |
+------+------------+
| Adam | C+ B A- A+ |
| Bill | D- |
| John | A- |
+------+------------+
GROUP BY met AGGREGATE-functies
Tafel BESTELLINGEN
+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items |
+---------+------------+----------+-------+--------+
| 1 | 1 | Bob | 1300 | 10 |
| 2 | 3 | Fred | 500 | 2 |
| 3 | 5 | Tess | 2500 | 8 |
| 4 | 1 | Bob | 300 | 6 |
| 5 | 2 | Carly | 800 | 3 |
| 6 | 2 | Carly | 1000 | 12 |
| 7 | 3 | Fred | 100 | 1 |
| 8 | 5 | Tess | 11500 | 50 |
| 9 | 4 | Jenny | 200 | 2 |
| 10 | 1 | Bob | 500 | 15 |
+---------+------------+----------+-------+--------+
- COUNT
Retourneer het aantal rijen dat aan een specifiek criterium in de clausule WHERE
voldoet.
Bijv .: Aantal bestellingen voor elke klant.
SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer
Resultaat:
+----------+--------+
| customer | orders |
+----------+--------+
| Bob | 3 |
| Carly | 2 |
| Fred | 2 |
| Jenny | 1 |
| Tess | 2 |
+----------+--------+
- SOM
Retourneer de som van de geselecteerde kolom.
Bijv .: som van het totaal en artikelen voor elke klant.
SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer
Resultaat:
+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob | 2100 | 31 |
| Carly | 1800 | 15 |
| Fred | 600 | 3 |
| Jenny | 200 | 2 |
| Tess | 14000 | 58 |
+----------+-----------+-----------+
- AVG
Retourneer de gemiddelde waarde van een kolom met numerieke waarde.
Bijv .: gemiddelde bestelwaarde voor elke klant.
SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultaat:
+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob | 700 |
| Carly | 900 |
| Fred | 300 |
| Jenny | 200 |
| Tess | 7000 |
+----------+-----------+
- MAX
Retourneer de hoogste waarde van een bepaalde kolom of uitdrukking.
Bijv .: het hoogste ordertotaal voor elke klant.
SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultaat:
+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob | 1300 |
| Carly | 1000 |
| Fred | 500 |
| Jenny | 200 |
| Tess | 11500 |
+----------+-----------+
- MIN
Retourneer de laagste waarde van een bepaalde kolom of uitdrukking.
Bijv .: laagste ordertotaal voor elke klant.
SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultaat:
+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob | 300 |
| Carly | 800 |
| Fred | 100 |
| Jenny | 200 |
| Tess | 2500 |
+----------+-----------+