SQL GROUP BYInstructions


L'instruction GROUP BY peut être utilisée avec certaines fonctions d'agrégation.


Instruction GROUP BY

L'instruction GROUP BY est utilisée conjointement avec des fonctions d'agrégation pour regrouper l'ensemble de résultats par une ou plusieurs colonnes.

Syntaxe SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;


Base de données de démonstration

Dans ce tutoriel, nous utiliserons la base de données d'exemple EXAMPLE.

Voici les données sélectionnées dans la table "Websites" :

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | Example      | http://www.example.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

Ci-dessous se trouvent les données de la table de journal d'accès du site Web "access_log" :

mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)


Application simple de GROUP BY

Compter les visites de chaque site_id dans access_log :

Exemples

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

L'exécution du SQL ci-dessus produit la sortie suivante :



SQL GROUP BY Jointure multi-tables

L'instruction SQL suivante compte le nombre d'enregistrements pour les sites Web qui ont des enregistrements :

Exemple

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

L'exécution du SQL ci-dessus produit la sortie suivante :

Autres extensions