21.MySQL中的聚合函数
- 1.准备
- 2.COUNT()
- 3.SUM()
- 4.AVG()
- 5.MAX()
- 6.MIN()
- 7.GROUP_CONCAT()
- 8.JSON_ARRAYAGG()
- 9.JSON_OBJECTAGG()
| 函数名 | 描述 |
|---|---|
| COUNT() | 返回参数字段的数量,统计为NULL的记录 |
| SUM() | 返回参数字段之和 |
| AVG() | 返回参数字段的平均值 |
| MAX() | 返回参数字段的最大值 |
| MIN() | 返回参数字段的最小值 |
| GROUP_CONCAT() | 返回符合条件的参数字段值的连接字符串 |
| JSON_ARRAYAGG() | 将符合条件的参数字段值作为单个JSON数组返回(MySQL5.7新增) |
| JSON_OBJECTAGG() | 将符合条件的参数字段值作为单个JSON对象返回(MySQL5.7新增) |
COUNT()、SUM()、AVG()、MAX()、MIN()和GROUP_CONCAT()函数中可以在参数前添加DISTINCT,表示对不重复的记录进行相关操作。
COUNT()的参数设置为“*”时,表示统计符合条件的所有记录(包含NULL)。
1.准备
1 2 3 4 5 6 7 8 9 10 11 | CREATE TABLE goods ( id INT, name VARCHAR (32), price INT ) ENGINE = INNODB DEFAULT CHARSET = utf8; INSERT INTO goods VALUES (1,'书',10); INSERT INTO goods VALUES (2,'键盘',11); INSERT INTO goods VALUES (3,'鼠标',15); INSERT INTO goods VALUES (4,'手机',20); INSERT INTO goods VALUES (5,NULL,15); |
2.COUNT()
1 2 3 4 5 6 7 8 9 | SELECT COUNT(id) FROM goods; -- 5 SELECT COUNT(name) FROM goods; -- 4,NULL不统计 SELECT COUNT(price) FROM goods; -- 5 SELECT COUNT(DISTINCT price) FROM goods; -- 4,因为有2个15,不重复的数量为4 SELECT COUNT(*) FROM goods; -- 5 |
3.SUM()
1 2 3 | SELECT SUM(price) FROM goods; -- 71 SELECT SUM(DISTINCT price) FROM goods; -- 56,因为有2个15,只算了一个 |
4.AVG()
1 2 3 | SELECT AVG(price) FROM goods; -- 14.2 SELECT AVG(DISTINCT price) FROM goods; -- 14,因为有2个15,只算了一个 |
5.MAX()
1 2 3 | SELECT MAX(price) FROM goods; -- 20 SELECT MAX(DISTINCT price) FROM goods; -- 20 |
6.MIN()
1 2 3 | SELECT MIN(price) FROM goods; -- 10 SELECT MIN(DISTINCT price) FROM goods; -- 10 |
7.GROUP_CONCAT()
1 2 | -- 书,键盘,鼠标,手机 SELECT GROUP_CONCAT(name) FROM goods; |
8.JSON_ARRAYAGG()
1 2 | -- ["书", "键盘", "鼠标", "手机", null] SELECT JSON_ARRAYAGG(name) FROM goods; |
9.JSON_OBJECTAGG()
1 2 3 4 5 | -- {"1": "书", "2": "键盘", "3": "鼠标", "4": "手机", "5": null} SELECT JSON_OBJECTAGG(id,name) FROM goods; -- error,因为id为5的name是NULL,JSON中键不能为NULL SELECT JSON_OBJECTAGG(name,price) FROM goods; |