Recherche…


Syntaxe

  1. SELECT expression1, expression2, ... expression_n,
  2. agrégat_fonction (expression)
  3. Des tables
  4. [O conditions conditions]
  5. 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 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow