MySQL
Par groupe
Recherche…
Syntaxe
- SELECT expression1, expression2, ... expression_n,
- agrégat_fonction (expression)
- Des tables
- [O conditions conditions]
- GROUP BY expression1, expression2, ... expression_n;
Paramètres
Paramètre | DÉTAILS |
---|---|
expression1, expression2, ... expression_n | Les expressions qui ne sont pas encapsulées dans une fonction d'agrégat doivent être incluses dans la clause GROUP BY. |
l'agrégat | Une fonction telle que SUM, COUNT, MIN, MAX ou AVG. |
les tables | Les tableaux que vous souhaitez récupérer des enregistrements. Il doit y avoir au moins une table répertoriée dans la clause FROM. |
O conditions conditions | Optionnel. Les conditions à remplir pour que les enregistrements soient sélectionnés. |
Remarques
La clause MySQL GROUP BY est utilisée dans une instruction SELECT pour collecter des données sur plusieurs enregistrements et regrouper les résultats par une ou plusieurs colonnes.
Son comportement est en partie régi par la valeur de la variable ONLY_FULL_GROUP_BY
. Lorsque cette option est activée, les SELECT
regroupées par colonne ne figurant pas dans la sortie renvoient une erreur. ( Il s'agit de la valeur par défaut à partir du 5.7.5 .) Le fait de définir et de ne pas définir cette variable peut entraîner des problèmes pour les utilisateurs naïfs ou les utilisateurs habitués à d'autres SGBD.
GROUPE EN UTILISANT LA Fonction SUM
SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;
Groupe en utilisant la fonction MIN
Supposons une table d'employés dans laquelle chaque ligne est un employé qui a un name
, un department
et un salary
.
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;
Cela vous dira quel service contient l'employé avec le salaire le plus bas et quel est ce salaire. Trouver le name
de l'employé avec le salaire le plus bas dans chaque département est un problème différent, au-delà de la portée de cet exemple. Voir "groupwise max".
GROUPE EN UTILISANT LA FONCTION COUNT
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;
GROUP BY en utilisant HAVING
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
L'utilisation de GROUP BY ... HAVING
pour filtrer les enregistrements agrégés est analogue à l'utilisation de SELECT ... WHERE
pour filtrer des enregistrements individuels.
Vous pouvez aussi dire HAVING Man_Power >= 10
car HAVING
comprend les "alias".
Grouper en utilisant Group Concat
Group Concat est utilisé dans MySQL pour obtenir des valeurs concaténées d'expressions comportant plus d'un résultat par colonne. Signification, il y a beaucoup de lignes à sélectionner pour une colonne telle que Name(1):Score(*)
prénom | But |
---|---|
Adam | Un + |
Adam | UNE- |
Adam | B |
Adam | C + |
Facture | RÉ- |
John | UNE- |
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM Grade
GROUP BY Name
Résultats:
+------+------------+
| Name | Grades |
+------+------------+
| Adam | C+ B A- A+ |
| Bill | D- |
| John | A- |
+------+------------+
GROUP BY avec les fonctions AGGREGATE
Table COMMANDES
+---------+------------+----------+-------+--------+
| 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 |
+---------+------------+----------+-------+--------+
- COMPTER
Renvoie le nombre de lignes satisfaisant un critère spécifique dans la clause WHERE
.
Par exemple: nombre de commandes pour chaque client.
SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer
Résultat:
+----------+--------+
| customer | orders |
+----------+--------+
| Bob | 3 |
| Carly | 2 |
| Fred | 2 |
| Jenny | 1 |
| Tess | 2 |
+----------+--------+
- SOMME
Renvoie la somme de la colonne sélectionnée.
Par exemple: somme du total et des articles pour chaque client.
SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer
Résultat:
+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob | 2100 | 31 |
| Carly | 1800 | 15 |
| Fred | 600 | 3 |
| Jenny | 200 | 2 |
| Tess | 14000 | 58 |
+----------+-----------+-----------+
- AVG
Renvoie la valeur moyenne d'une colonne de valeur numérique.
Par exemple: valeur de commande moyenne pour chaque client.
SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer
Résultat:
+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob | 700 |
| Carly | 900 |
| Fred | 300 |
| Jenny | 200 |
| Tess | 7000 |
+----------+-----------+
- MAX
Renvoie la valeur la plus élevée d'une certaine colonne ou expression.
Par exemple: le plus haut total de commande pour chaque client.
SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer
Résultat:
+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob | 1300 |
| Carly | 1000 |
| Fred | 500 |
| Jenny | 200 |
| Tess | 11500 |
+----------+-----------+
- MIN
Renvoie la valeur la plus basse d'une certaine colonne ou expression.
Par exemple: le plus bas total de commande pour chaque client.
SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer
Résultat:
+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob | 300 |
| Carly | 800 |
| Fred | 100 |
| Jenny | 200 |
| Tess | 2500 |
+----------+-----------+