Latest web development tutorials

جملة HAVING SQL

جملة HAVING

زيادة في جملة HAVING SQL ل، أين الكلمة لا يمكن استخدامها مع دالات التجميع.

بصعوبات بند يسمح لنا لتصفية بعد كل مجموعة من حزم البيانات.

SQL بصعوبات في بناء الجملة

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;


قاعدة بيانات تجريبي

في هذا البرنامج التعليمي، سوف نستخدم نموذج قاعدة البيانات w3big.

وفيما يلي تحديد "مواقع" بيانات الجدول:

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

هنا هي البيانات "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)


أمثلة من SQL بصعوبات

الآن نريد أن نجد العدد الإجمالي للزيارات أكبر من 200 موقع.

نحن نستخدم عبارة SQL التالية:

أمثلة

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;

تنفيذ SQL أعلاه نتائج الإخراج هي كما يلي:

الآن نريد أن نجد العدد الإجمالي للزيارات أكبر من 200 موقع، وأقل من 200 اليكسا.

نضيف عبارة SQL العاديين جملة WHERE:

أمثلة

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;

تنفيذ SQL أعلاه نتائج الإخراج هي كما يلي: