SQL HAVINGClauses


Clause HAVING

La raison d'ajouter la clause HAVING en SQL est que le mot-clé WHERE ne peut pas être utilisé avec les fonctions d'agrégation.

La clause HAVING nous permet de filtrer les données groupées après le regroupement.

Syntaxe de HAVING en SQL

Syntaxe de HAVING en SQL

SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;

Description du paramètre :

  • column1: La colonne à récupérer.
  • aggregate_function(column2): Une fonction d'agrégation, telle que SUM, COUNT, AVG, etc., appliquée àcolumn2la valeur de.
  • table_name: La table à partir de laquelle récupérer les données.
  • GROUP BY column1: Seloncolumn1Regrouper les données en fonction des valeurs de la colonne.
  • HAVING condition: Une condition utilisée pour filtrer les résultats groupés. Seuls les groupes qui satisfont à la condition seront inclus dans l'ensemble de résultats.


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     |
+----+---------------+---------------------------+-------+---------+

Voici les données de la table de journal d'accès du site "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)


Exemple de HAVING en SQL

Nous voulons maintenant trouver des sites web avec un nombre total de visites supérieur à 200.

Nous utilisons l'instruction SQL suivante :

Exemple

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id=Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

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

Nous voulons maintenant trouver des sites web avec un nombre total de visites supérieur à 200 et un classement Alexa inférieur à 200.

Nous ajoutons une clause WHERE ordinaire à l'instruction SQL :

Exemple

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id WHERE Websites.alexa < 200 GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

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

Autres extensions