MySQL
Grupp av
Sök…
Syntax
- VÄLJ expression1, expression2, ... expression_n,
- aggregate_function (uttryck)
- FRÅN bord
- [VAR villkor]
- GRUPP AV uttryck1, uttryck2, ... uttryck_n;
parametrar
Parameter | INFORMATION |
---|---|
expression1, expression2, ... expression_n | Uttryck som inte är inkapslade i en sammanlagd funktion och måste inkluderas i GROUP BY-klausulen. |
aggregate_function | En funktion som SUM, COUNT, MIN, MAX eller AVG-funktioner. |
tabeller | han tabeller som du vill hämta poster från. Det måste finnas minst en tabell i FROM-klausulen. |
VAR förhållanden | Valfri. Villkoren som måste uppfyllas för att posterna ska väljas. |
Anmärkningar
MySQL GROUP BY-klausulen används i ett SELECT-uttalande för att samla data över flera poster och gruppera resultaten med en eller flera kolumner.
Dess beteende styrs delvis av värdet på variabeln ONLY_FULL_GROUP_BY
. När detta är aktiverat, SELECT
uttalanden som grupperar efter valfri kolumn som inte finns i utgången ger ett fel. ( Detta är standard från och med 5.7.5 .) Både inställning och inte inställning av denna variabel kan orsaka problem för naiva användare eller användare som är vana vid andra DBMS.
GRUPP AV ANVÄNDNING av SUM Funktion
SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;
Gruppera med MIN-funktionen
Anta en tabell med anställda där varje rad är en anställd som har ett name
, en department
och en salary
.
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;
Detta skulle säga vilken avdelning som innehåller den anställd med lägsta lön och vad den är. Att hitta name
på den anställd med den lägsta lönen i varje avdelning är ett annat problem, utöver detta exempel. Se "gruppvis max".
GRUPP AV ANVÄNDNING AV COUNT Funktion
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;
GRUPPERA MED HAVING
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
Att använda GROUP BY ... HAVING
att filtrera sammanlagda poster är analogt med att använda SELECT ... WHERE
att filtrera enskilda poster.
Du kan också säga HAVING Man_Power >= 10
eftersom HAVING
förstår "alias".
Gruppera genom att använda Group Concat
Group Concat används i MySQL för att få sammanlagda värden på uttryck med mer än ett resultat per kolumn. Vilket innebär att det finns många rader som ska väljas tillbaka för en kolumn, t.ex. Name(1):Score(*)
namn | Göra |
---|---|
Adam | A + |
Adam | A- |
Adam | B |
Adam | C + |
Räkningen | D- |
John | A- |
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM Grade
GROUP BY Name
Resultat:
+------+------------+
| Name | Grades |
+------+------------+
| Adam | C+ B A- A+ |
| Bill | D- |
| John | A- |
+------+------------+
GRUPPER AV med AGGREGATE-funktioner
Tabell BESTÄLLNINGAR
+---------+------------+----------+-------+--------+
| 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 |
+---------+------------+----------+-------+--------+
- RÄKNA
Returnera antalet rader som uppfyller ett specifikt kriterium i WHERE
klausulen.
Exempel: Antal beställningar för varje kund.
SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer
Resultat:
+----------+--------+
| customer | orders |
+----------+--------+
| Bob | 3 |
| Carly | 2 |
| Fred | 2 |
| Jenny | 1 |
| Tess | 2 |
+----------+--------+
- SUMMA
Returnera summan av den valda kolumnen.
Exempel: Summan av summan och artiklarna för varje kund.
SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer
Resultat:
+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob | 2100 | 31 |
| Carly | 1800 | 15 |
| Fred | 600 | 3 |
| Jenny | 200 | 2 |
| Tess | 14000 | 58 |
+----------+-----------+-----------+
- AVG
Returnera det genomsnittliga värdet av en kolumn av numeriskt värde.
Exempel: Genomsnittligt ordervärde för varje kund.
SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultat:
+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob | 700 |
| Carly | 900 |
| Fred | 300 |
| Jenny | 200 |
| Tess | 7000 |
+----------+-----------+
- MAX
Returnera det högsta värdet för en viss kolumn eller uttryck.
Exempel: Högsta orderantal för varje kund.
SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultat:
+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob | 1300 |
| Carly | 1000 |
| Fred | 500 |
| Jenny | 200 |
| Tess | 11500 |
+----------+-----------+
- MIN
Returnera det lägsta värdet för en viss kolumn eller uttryck.
Exempel: Lägsta orderantal för varje kund.
SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer
Resultat:
+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob | 300 |
| Carly | 800 |
| Fred | 100 |
| Jenny | 200 |
| Tess | 2500 |
+----------+-----------+