MySQL-sumgrupo laŭ uzo? Detala klarigo de grupo laŭ kalkulo en MySQL-datumbazo

MySQL Kiel uzi sumgrupon per?MySQL-datumbazoDetala klarigo de grupo laŭ kalkulo en

MySQL GROUP BY deklaro

La deklaro GROUP BY grupigas rezultan aron bazitan sur unu aŭ pluraj kolumnoj.

Ni povas uzi funkciojn kiel COUNT, SUM, AVG, ktp sur grupigitaj kolumnoj.

GROUP BY sintakso

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

Ekzempla pruvo

La ekzemploj en ĉi tiu ĉapitro uzas la jenajn tabelstrukturojn kaj datumojn.Antaŭ uzo, ni povas importi la sekvajn datumojn en la datumbazon.

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;

Post kiam la importo sukcesas, faru la sekvan SQL-deklaron:

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)

Poste, ni uzas la deklaron GROUP BY por grupigi la datuman tabelon laŭ nomo kaj kalkuli kiom da registroj ĉiu persono havas:

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

Uzu KUN ROLLUP

KUN ROLLUP povas fari la samajn statistikojn (SUM, AVG, COUNT...) surbaze de grupigitaj statistikaj datumoj.

Ekzemple, ni grupigas la supran datumtabelon laŭ nomo, kaj poste kalkulas la nombron da fojoj kiam ĉiu persono ensalutas:

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)

La rekordo NULL indikas la nombron da ensalutoj por ĉiuj.

Ni povas uzi kunflui por agordi nomon kiu povas anstataŭigi NUll. kunfluigi sintakson:

select coalesce(a,b,c);

Parametropriskribo: Se a==nula, elektu b; se b==nula, elektu c; se a!=nula, elektu a; se abc estas ambaŭ nulaj, redonu nulo (sensignifa).

En la sekva ekzemplo se la nomo estas malplena, ni uzas la totalon anstataŭe:

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)

Lasu komenton

Via retadreso ne estos publikigita. Bezonataj kampoj estas uzataj * Etikedo

Rulumu al Supro