English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
جملة GROUP BY تقوم بتجميع مجموعة من نتائج التجميع.
في الحقول المجمعة يمكننا استخدام COUNT، SUM، AVG، وأدوات أخرى.
SELECT اسم الحقل، وظيفة(اسم الحقل) FROM اسم الجدول WHERE اسم الحقل عميل قيمة GROUP BY اسم الحقل;
هذا الفصل المثال يستخدم هيكل البيانات التالي وبيانات، يمكننا أولاً إدخال البيانات التالية إلى قاعدة البيانات.
SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `employee_tbl` -- ---------------------------- DROP TABLE IF EXISTS `employee_tbl`; CREATE TABLE `employee_tbl` ( `id` int(11) NOT NULL, `name` char(10) NOT NULL DEFAULT '', `date` datetime NOT NULL, `login` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'number of logins', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `employee_tbl` -- ---------------------------- BEGIN; INSERT INTO `employee_tbl` VALUES ('1', 'الاسم', '2016-04-22 15:25:33', '1'), ('2', 'الاسم', '2016-04-20 15:25:47', '3'), ('3', 'الاسم', '2016-04-19 15:26:02', '2'), ('4', 'الاسم', '2016-04-07 15:26:14', '4'), ('5', 'الاسم', '2016-04-11 15:26:40', '4'), ('6', 'الاسم', '2016-04-04 15:26:54', '2'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;
بعد الانتهاء من الاستيراد، اecute السطر SQL التالي:
mysql> set names utf8; mysql> SELECT * FROM employee_tbl; +----+--------+---------------------+--------+ | id | الاسم | التاريخ | login | +----+--------+---------------------+--------+ | 1 | الاسم | 2016-04-22 15:25:33 | 1 | | 2 | الاسم | 2016-04-20 15:25:47 | 3 | | 3 | لي | 2016-04-19 15:26:02 | 2 | | 4 | لي | 2016-04-07 15:26:14 | 4 | | 5 | لي | 2016-04-11 15:26:40 | 4 | | 6 | لي | 2016-04-04 15:26:54 | 2 | +----+--------+---------------------+--------+ 6 rows in set (0.00 sec)
الآن سنستخدم جملة GROUP BY لتجميع الجدول حسب الاسم، ونحسب عدد السجلات لكل شخص:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; +--------+----------+ | name | COUNT(*) | +--------+----------+ | لي | 1 | | لي | 3 | | لي | 2 | +--------+----------+ 3 rows in set (0.01 sec)
WITH ROLLUP يمكنه تنفيذ نفس الإحصاء (SUM, AVG, COUNT) على أساس بيانات التجميع.
على سبيل المثال، سنقوم بتجميع الجدول المقدم حسب الاسم، ثم نحسب عدد مرات تسجيل الدخول لكل شخص:
mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; +--------+--------------+ | name | singin_count | +--------+--------------+ | لي | 2 | | لي | 7 | | لي | 7 | | NULL | 16 | +--------+--------------+ 4 rows in set (0.00 sec)
السجل NULL يمثل عدد مرات تسجيل الدخول لكل شخص.
يمكننا استخدام coalesce لتحديد اسم يمكن استبداله بـ NULL،نموذج coalesce هو:
select coalesce(a,b,c);
شرح المعلمات: إذا كان a==null، يتم اختيار b؛ إذا كان b==null، يتم اختيار c؛ إذا كان a!=null، يتم اختيار a؛ إذا كانت a و b و c جميعها null، يتم العودة إلى null (غير ذي معنى).
في المثال التالي إذا كان الاسم فارغًا نستخدم الإجمالي كإبدال:
mysql> SELECT coalesce(name, 'الإجمالي'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; +--------------------------------------+--------------+ | coalesce(name, 'الإجمالي') | singin_count | +--------------------------------------+--------------+ | الصف الثالث | 2 | | الصف الثاني | 7 | | الصف الأول | 7 | | الإجمالي | 16 | +--------------------------------------+--------------+ 4 صفوف في المجموعة (0.01 ثانية)