Sök…


Syntax

  1. VÄLJ expression1, expression2, ... expression_n,
  2. aggregate_function (uttryck)
  3. FRÅN bord
  4. [VAR villkor]
  5. 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 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow