Latest web development tutorials

SQL clausola HAVING

clausola HAVING

Aumento SQL clausola HAVING perché, DOVE parola chiave non può essere utilizzata con funzioni di aggregazione.

HAVING ci permette di filtro dopo ogni serie di pacchetti di dati.

SQL AVERE Sintassi

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


Il database demo

In questo tutorial, useremo database di esempio w3big.

Il seguente è un selezionati "siti web" dati della tabella:

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

Ecco i dati "access_log" tabella di accesso al sito di registrazione:

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)


Esempi di SQL AVENDO

Ora vogliamo trovare il numero totale di visite è superiore a 200 siti.

Usiamo la seguente istruzione SQL:

Esempi

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;

Eseguire SQL sopra i risultati di uscita sono i seguenti:

Ora vogliamo trovare il numero totale di visite è superiore a 200 siti, e meno di 200 rank di Alexa.

Aggiungiamo un'istruzione SQL ordinaria clausola WHERE:

Esempi

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;

Eseguire SQL sopra i risultati di uscita sono i seguenti: