聚合查询
In this section, you will learn below keywords of MySQL:
- AVG
- COUNT
- MAX
- MIN
- SUM
- ROUND
Example table: user_profile
id | device_id | gender | age | university | gpa | active_days_within_30 | question_cnt | answer_cnt |
---|---|---|---|---|---|---|---|---|
1 | 2138 | male | 21 | Peking University | 3.4 | 7 | 2 | 12 |
2 | 3214 | male | Fudan University | 4 | 15 | 5 | 25 | |
3 | 6543 | female | 20 | Peking University | 3.2 | 12 | 3 | 30 |
4 | 2315 | female | 23 | Zhejiang University | 3.6 | 5 | 1 | 2 |
5 | 5432 | male | 25 | Shandong University | 3.8 | 20 | 15 | 70 |
6 | 2131 | male | 28 | Shandong University | 3.3 | 15 | 7 | 13 |
7 | 4321 | male | 28 | Fudan University | 3.6 | 9 | 6 | 52 |
note
- active_days_within_30: 30 天内活跃天数
- question_cnt: 发帖数量
- answer_cnt: 回答数量
聚合函数
有时候并不需要返回实际表中的数据,而只是对数据进行总结。MySQL 提供一些函数可以对获取的数据进行分析和报告,下面我们来介绍一下常见的聚合函数。
AVG
AVG()
可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。下面的例子返回的是 user_profile
表中所有用户的平均 gpa 情况 。
SELECT AVG(gpa) FROM user_profile;
AVG(gpa) |
---|
3.557142836706979 |
COUNT
COUNT()
函数为计数函数,主要有两种使用方式:
- 使用
COUNT(*)
对表中行的数目进行计数,不管表列中包含的是空值(NULL
)还是非空值。 - 使用
COUNT(column)
对特定列中具有值的行进行计数,忽略NULL
值。
这两点该怎么理解呢,比如对于下面的数据表,如果用语法 1,那么得到的结果会是 7,因为表中一共有 7 行数据
Syntax 1:
SELECT COUNT(*) AS num_cnt FROM user_profile;
num_cnt |
---|
7 |
但如果我们对 age
列进行 COUNT
,因为该列中存在一行为空值,在计数中不会被算入,语法 2 得到的结果会是 6
Syntax 2:
SELECT COUNT(age) AS num_cnt FROM user_profile;
num_cnt |
---|
6 |
MAX
MAX()
返回指定列中的最大值。
SELECT MAX(age) AS max_age FROM user_profile;
max_age |
---|
28 |
MIN
MIN()
的功能正好与 MAX()
功能相反,它返回指定列的最小值,如下所示:
SELECT MIN(age) AS min_age FROM user_profile;
min_age |
---|
20 |
SUM
SUM()
用来返回指定列值的和(总计)。如下所示函数返回了 age
列所有用户年纪的总和
SELECT SUM(age) AS sum_age FROM user_profile;
sum_age |
---|
145 |
ROUND
在一些聚合运算中,容易出现结果为非整数的情况,这时候如果想要限定结果返回的小数位数就可以使用 SQL 中内置的 ROUND
函数,语法格式为:
ROUND(value, n)
其中 value
代表想要限制小数位数的字段,n
代表想要限制的小数位数。下列语句就代表求 age
列的均值,并保留一位小数。
SELECT ROUND(AVG(age), 1) AS avg_age FROM user_profile;
avg_age |
---|
24.2 |