Skip to main content

聚合查询

In this section, you will learn below keywords of MySQL:

  • AVG
  • COUNT
  • MAX
  • MIN
  • SUM
  • ROUND

Example table: user_profile

iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt
12138male21Peking University3.47212
23214maleFudan University415525
36543female20Peking University3.212330
42315female23Zhejiang University3.6512
55432male25Shandong University3.8201570
62131male28Shandong University3.315713
74321male28Fudan University3.69652
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

Quiz

Reference

  1. MySQL Quiz: aggregate functions by nowcoder