Zoeken…


Syntaxis

  1. SELECT expression1, expression2, ... expression_n,
  2. aggregate_function (expressie)
  3. VAN tabellen
  4. [WAAR voorwaarden]
  5. 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 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow