Manuel du didac...SE CONNECTER
Manuel du didacticiel de démarrage SQL
auteur:php.cn  temps de mise à jour:2022-04-12 14:15:40

SQL AVOIR


SQL HAVINGclause


HAVING clause

La raison de l'ajout de la clause HAVING dans SQL est que le mot clé WHERE ne peut pas être utilisé avec des fonctions d'agrégation.

La clause HAVING nous permet de filtrer chaque groupe de données après regroupement.

Syntaxe SQL HAVING

SELECT nom_colonne, fonction_agrégat (nom_colonne)
FROM nom_table
WHERE nom_colonne valeur de l'opérateur
GROUP BY nom_colonne
HAVING fonction_agrégat (nom_colonne ) valeur de l'opérateur ;


Base de données de démonstration

Dans ce tutoriel, nous utiliserons l'exemple de base de données php.

Voici les données sélectionnées dans le tableau "Sites Web" :

+----+--------------+-- - --------------+------+---------+
| identifiant | URL --------+-------+---------+
| 1 | Google https://www.google.cm/ 1 | |
| 2 | Taobao | https://www.taobao.com/ | 13 | CN |
| php Site Web chinois |
| Weibo | http://weibo.com/ |
| | http://stackoverflow.com/ | 0 |
+----+--------------+---------- ---------------+------+---------+

Voici les données de la table d'enregistrement d'accès au site Web "access_log" :

mysql> SELECT * FROM access_log;
+-----+------ --- +-------+------------+
| aide site_id | compte date |
+-----+--- --- ---+-------+------------+
| 1 | 45 | 2016-05-10 |
| 3 | 100 | 2016-05-13 |
| 3 | 2016-05-14 |
| 4 | 2016-05-14 |
| | 2016-05-14 |
| 6 | 13 | 2016-05-15 |
| -05 -16 |
| 9 | 201 | 2016-05-17 |
+-----+---------+------+- -- ---------+
9 lignes dans l'ensemble (0,00 sec)

Instance SQL HAVING

Maintenant, nous voulons trouver le visites totales Plus de 200 sites Web.

Nous utilisons l'instruction SQL suivante :

Exemple

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Sites Web
ON access_log.site_id=Websites.id)
GROUPE PAR Websites.name
HAVING SUM(access_log.count) > 200;
Le résultat de l'exécution du SQL ci-dessus est le suivant :

Maintenant, nous voulons trouvez le nombre total de visites supérieur à 200 sur le site Web et le classement Alexa est inférieur à 200.

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

Exemple

SELECT Websites.name, SUM(access_log.count) AS nums FROM Sites Web
INNER JOIN access_log
ON Websites.id=access_log.site_id
OÙ Websites.alexa < 200
GROUPE PAR Websites.name
HAVING SOMME(access_log.count) > 200;

Le résultat de l'exécution du SQL ci-dessus est le suivant :