MySQL-summagrupp efter användning? Detaljerad förklaring av grupp för antal i MySQL-databas

MySQL Summa grupp efter användning?MySQL-databasDetaljerad förklaring av grupp efter antal

MySQL GROUP BY-sats

GROUP BY-satsen grupperar resultatuppsättningen baserat på en eller flera kolumner.

På den grupperade kolumnen kan vi använda funktionerna COUNT, SUM, AVG, etc..

GROUP BY syntax

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

Exempel demonstration

I exemplet i detta kapitel används följande tabellstruktur och data. Innan vi använder dem kan vi importera följande data till 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 har lyckats, kör du följande SQL-sats:

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)

Därefter använder vi GROUP BY-satsen för att gruppera datatabellen efter namn och räkna hur många poster varje person har:

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

Använd MED ROLLUP

WITH ROLLUP kan implementera samma statistik (SUM, AVG, COUNT...) på basis av grupperad statistik.

Till exempel grupperar vi ovanstående datatabell efter namn och räknar sedan antalet gånger varje person har loggat in:

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 representerar antalet inloggningar för alla.

Vi kan använda coalesce för att ställa in ett namn som kan ersätta NUll, coalesce syntax:

select coalesce(a,b,c);

Parameterbeskrivning: om a==null, välj b; om b==null, välj c; om a!=null, välj a; om abc är null, returnera null (meningslöst).

Om namnet är tomt i följande exempel använder vi summan istället:

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-postadress kommer inte att publiceras. 必填 项 已 用 * 标注

Bläddra till början