MySQL sum gruppe efter brug? Detaljeret forklaring af gruppe efter antal i MySQL-database

MySQL Sum gruppe efter brug?MySQL databaseDetaljeret forklaring af gruppe efter antal

MySQL GROUP BY-udsagn

GROUP BY-sætningen grupperer resultatsættet baseret på en eller flere kolonner.

På den grupperede kolonne kan vi bruge COUNT, SUM, AVG osv. funktioner.

GRUPPER EFTER syntaks

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

Eksempel demonstration

Eksemplet i dette kapitel bruger følgende tabelstruktur og data. Inden vi bruger det, kan vi importere følgende data til databasen.

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;

Når importen er vellykket, skal du udføre følgende SQL-sætning:

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)

Dernæst bruger vi GROUP BY-sætningen til at gruppere datatabellen efter navn og tælle, hvor mange poster hver person har:

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

Brug MED ROLLUP

MED ROLLUP kan implementere den samme statistik (SUM, AVG, COUNT...) på basis af grupperet statistik.

For eksempel grupperer vi ovenstående datatabel efter navn og tæller derefter antallet af gange, hver person har logget ind:

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)

Posten NULL repræsenterer antallet af logins for alle.

Vi kan bruge coalesce til at sætte et navn, der kan erstatte NUll, coalesce syntaks:

select coalesce(a,b,c);

Parameterbeskrivelse: hvis a==null, vælg b; hvis b==null, vælg c; hvis a!=null, vælg a; hvis abc er null, returner null (meningsløst).

I det følgende eksempel, hvis navnet er tomt, bruger vi totalen i stedet:

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)

发表 评论

Din e-mailadresse vil ikke blive offentliggjort. 必填 项 已 用 * 标注

Rul til top