Skupina vsote MySQL glede na uporabo? Podrobna razlaga skupine po štetju v bazi podatkov MySQL

MySQL Skupina vsote po uporabi?Baza podatkov MySQLPodrobna razlaga skupine po štetju

Izjava MySQL GROUP BY

Stavek GROUP BY združuje niz rezultatov na podlagi enega ali več stolpcev.

V združenem stolpcu lahko uporabljamo funkcije COUNT, SUM, AVG itd.

GROUP BY sintaksa

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

Primer demonstracije

Primer v tem poglavju uporablja naslednjo strukturo tabele in podatke.Pred uporabo lahko naslednje podatke uvozimo v bazo podatkov.

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;

Ko je uvoz uspešen, izvedite naslednji stavek 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)

Nato uporabimo stavek GROUP BY, da združimo podatkovno tabelo po imenu in preštejemo, koliko zapisov ima vsaka oseba:

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

UPORABA Z ROLLUPOM

WITH ROLLUP lahko implementira iste statistike (SUM, AVG, COUNT...) na podlagi združenih statistik.

Na primer, zgornjo podatkovno tabelo združimo po imenu in nato preštejemo, kolikokrat se je vsaka oseba prijavila:

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)

Zapis NULL predstavlja število prijav za vse.

Za nastavitev imena, ki lahko nadomesti NUll, lahko uporabimo coalesce, sintakso coalesce:

select coalesce(a,b,c);

Opis parametra: če je a==null, izberite b; če je b==null, izberite c; če je a!=null, izberite a; če je abc nič, vrnite nič (brez pomena).

V naslednjem primeru, če je ime prazno, namesto tega uporabimo skupno:

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)

发表 评论

您的邮箱地址不会被公开。 必填 项 已 用 * Oznaka

Pomaknite se na vrh