聚合函数... 这些东西在数据分析的世界里简直就是魔法师!它们能把几百万行数据变成精炼又好懂的结果。有了它们,我们能计数、找最小最大值、算平均数,还能做一堆别的操作。现在我们一步步来搞明白。
聚合函数 —— 这是SQL里专门用来对一组行做操作并返回单一结果的特殊函数。打个比方,这就像你统计你早上喝咖啡的所有数据,比如:你一周喝了多少杯,加没加糖,或者连续几天都加了奶油。
聚合函数能解决的典型问题:
- 统计表里总共有多少条记录。
- 找出数值列里的最小值或最大值。
- 把某一列的值都加起来。
- 算出某一列的平均值。
- 筛选出唯一值。
底层到底是怎么工作的?
SQL会在SELECT选出数据后再执行聚合函数。比如你写了SUM()或者AVG(),SQL会先把数据收集好,然后只对选中的行做计算。
PostgreSQL里的主要聚合函数
来点实际的,看看我们最常用的五个主角:
COUNT()—— 统计行数。SUM()—— 把数值列的值都加起来。AVG()—— 算平均值。MIN()—— 找最小值。MAX()—— 找最大值。
聚合函数的使用例子
- 用
COUNT()计数
COUNT()函数可以统计表里总共有多少行,或者某一列里非空值的数量。
举个例子:假设我们有个叫students的表,存着学生的信息:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto Art | 20 | 85 |
| 2 | Maria Chi | 22 | 90 |
| 3 | Alex Lin | 21 | 78 |
| 4 | Anna Song | 23 | NULL |
来统计一下学生总数:
SELECT
COUNT(*) AS total_students
FROM students;
结果:
| total_students |
|---|
| 4 |
现在我们来统计一下有grade的学生数量:
SELECT
COUNT(grade) AS students_with_grades
FROM students;
结果:
| students_with_grades |
|---|
| 3 |
为啥会这样?因为COUNT(column)会忽略NULL值。
- 用
SUM()求和
SUM()函数用来把数值列里的所有值加起来。
举个例子:来看看我们的学生总共得了多少分。
SELECT
SUM(grade) AS total_grades
FROM students;
结果:
| total_grades |
|---|
| 253 |
注意:如果这一列有NULL,它们在求和时会被直接忽略掉。
- 用
AVG()算平均值
AVG()函数会算出某一列所有数值的平均数。
举个例子:来算一下学生的平均分。
SELECT
AVG(grade) AS average_grade
FROM students;
结果:
| average_grade |
|---|
| 84.33 |
你可能注意到了,NULL又被忽略了。
- 用
MIN()和MAX()找最小最大值
有时候我们要找最小值或最大值,这就用到MIN()和MAX()。
举个例子:找出最年轻和最年长的学生。
SELECT
MIN(age) AS youngest_student,
MAX(age) AS oldest_student
FROM students;
结果:
| youngest_student | oldest_student |
|---|---|
| 20 | 23 |
这些函数的更多细节我们下节课再聊。
认识NULL
关于NULL很快会有专门的讲座,但简单说,NULL就是没有值。啥都没有,空的,啥都不是!
假设我们有个students表,存着学生的信息:
| id | name | age | grade | hobbie |
|---|---|---|---|---|
| 1 | Otto Art | 20 | 85 | |
| 2 | Maria Chi | 22 | 90 | 跳舞 |
| 3 | Alex Lin | 21 | 78 | |
| 4 | Anna Song | 23 |
名字和年龄总是有的,但分数和爱好可能没有。如果表格里的单元格啥都没有,那就说它包含NULL。NULL不是数字也不是字符串,它是一个特殊的代码,表示啥值都没有。
GO TO FULL VERSION