MySQL batuketa taldea erabileraren arabera? Taldearen azalpen zehatza MySQL datu-basean

MySQL Taldea batuketa erabileraren arabera?MySQL datu-baseaTaldearen azalpen zehatza zenbaketaren arabera

MySQL GROUP BY instrukzioa

GROUP BY adierazpenak zutabe batean edo gehiagotan oinarrituta taldekatzen du emaitza multzoa.

Taldekako zutabean ZENBATU, BURUZ, BATUZ, etab. funtzioak erabil ditzakegu.

GROUP BY sintaxia

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

Adibide erakustaldia

Kapitulu honetako adibideak taularen egitura eta datu hauek erabiltzen ditu Erabili aurretik, datu hauek datu-basera inporta ditzakegu.

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;

Inportazioa arrakastatsua izan ondoren, exekutatu SQL instrukzio hau:

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)

Ondoren, GROUP BY adierazpena erabiltzen dugu datu-taula izenaren arabera taldekatzeko eta zenbat erregistro dituen pertsona bakoitzak:

mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

Erabili ROLLUPAREKIN

WITH ROLLUP-ek estatistika berdinak (SUM, AVG, COUNT...) inplementa ditzake taldekako estatistiketan oinarrituta.

Adibidez, goiko datu-taula izenaren arabera taldekatzen dugu, eta gero pertsona bakoitzak saioa hasi duen kopurua zenbatzen dugu:

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 erregistroak guztientzako saio-hasiera kopurua adierazten du.

Coalesce erabil dezakegu NUll, coalesce sintaxia ordezka dezakeen izen bat ezartzeko:

select coalesce(a,b,c);

Parametroaren deskribapena: a==null bada, aukeratu b; b==null bada, aukeratu c; a!=null bada, aukeratu a; abc null bada, itzuli null (esangurarik gabekoa).

Ondorengo adibidean izena hutsik badago, guztira erabiliko dugu ordez:

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)

发表 评论

Zure helbide elektronikoa ez da argitaratuko. 必填 项 已 用 * 标注

Igo korrituko