21.MySQL中的聚合函数

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;