Latest web development tutorials

بيان الخلية GROUP BY

GROUP BY بيان على أساس واحد أو أكثر من الأعمدة في مجموعة النتائج في مجموعات.

في تجمع العمود يمكننا استخدام COUNT، SUM، AVG، وغيرها من المهام.

GROUP BY بناء الجملة

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

أمثلة تجريبي

أمثلة من هذا الفصل إلى استخدام هيكل الجدول التالي والبيانات، قبل أن نتمكن من البدء في استخدام البيانات التالية في قاعدة البيانات.

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,
  `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
  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;

بعد الاستيراد ناجحا، تنفيذ عبارة SQL التالية:

mysql> set names utf8;
mysql> SELECT * FROM employee_tbl;
+----+--------+---------------------+--------+
| id | name   | date                | singin |
+----+--------+---------------------+--------+
|  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

مع ROLLUP يمكن تنفيذها على أساس البيانات الإحصائية في علبة ثم تعرضوا لنفس الإحصاءات (SUM، AVG، عد ...).

على سبيل المثال، فإننا سوف تكون أكثر من مجموعة واحدة جدول البيانات بالاسم، ومن ثم حساب عدد المرات كل شخص المسجل:

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 يشير التي تسجل كل محاولات تسجيل الدخول.

يمكننا استخدام تتجمع لتعيين اسم فارغة بديل، تتجمع في بناء الجملة:

select coalesce(a,b,c);

المعلمة الوصف:! إذا كان لاغيا ==، ثم حدد ب، وإذا ب == لاغية، ثم حدد ج، وإذا كان = فارغة، ثم اختيار، وإذا اي بي سي لاغية، فارغة (لا معنى لها) العودة.

في المثال التالي، إذا كان اسم فارغ نستخدم بدلا من العدد الكلي:

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 rows in set (0.01 sec)