文章目录
所谓聚合,指的是垂直(跨行)聚合,
即输入多行,而只输出一行。
注:若需横向(跨列)计算,则需要使用算数操作符+, -, *, /
。
1. MAX/MIN
它两的用法,没有区别。
MAX/MIN 聚合函数
作用于表格的任意一列数据,并返回一个值,为其最大值/最小值。
# python 理解 max(numerical),value in col_lst > 0
a = 0
for v col_lst:
if v > a:
a = v
print(f"Max: {a}")
这一列数据的数据类型可以是数值,也可以是非数值。如果是数值列,则返回最大或最小的数值,若为非数值列,则按照字母顺序返回字母A
或者 字母Z
SELECT MAX(col_name), MIN(col_name)
FROM t
值得注意的是,MAX/MIN
并会告诉你这个最大值或者最小值对应的行号,它只负责找出最大或者最小的那个值。
对于下面这种多行具有相同最大值的行,它仅仅返回第一个出现这个最值的行。
city | count |
---|---|
Amsterdam | 1 |
Bangalore | 1 |
Berlin | 2 |
Edinburgh | 1 |
London | 2 |
使用GROUP BY
返回的结果是:
+--------+------------+
| City | MAX(count) |
+--------+------------+
| Berlin | 2 |
+--------+------------+
可以看出返回的是(字母排序)第一个 count 为2 的那一行数据。
2. SUM/AVG
它两的用法很类似,放在一起。
SUM/AVG 聚合函数
作用于表格的一列为数值列的数据,并返回一个值,为忽略NULL值后的求和值/平均值。
SELECT SUM(numerical_col_name), AVG(numerical_col_name)
FROM t
注:SUM
是将NULL
当做0
来处理;AVG
是完全忽略NULL
值
有些情况下,AVG
可能需要将 NULL值当做0值来处理,可以借助条件语句 CASE
来完成,后面详述。
3. COUNT
COUNT
相比其它聚合函数会有些特殊:
可以作用于全部列,同时可以作用于非数值列,而且还可以求去重后的行数(使用DISTINCT
)。
COUNT counts how many rows are in a particular column.
COUNT 聚合函数
的两种用法:作用于表格的任意一列或者全部列数据,并返回一个值,前者为某一列 非NULL
值的行数,后者表示全表格的行数。
# 作用于全部列
SELECT COUNT(*) # 也可使用 COUNT(1)
FROM t
注:COUNT(*)
和 COUNT(1)
具有相同的效果。
# 作用于某一列
SELECT COUNT(col_name)
FROM t
COUNT() 还有另一种用法,结合DISTINCT
返回不重复的行数。
# 求去重行数
SELECT COUNT(DISTINCT col_name)
FROM t
小结
- COUNT的三种形式:
COUNT(*)
/COUNT(1)
、COUNT(col_name)
、COUNT(DISTINCT col_name/*/1)
- MAX/MIN 作用于某一数值列,返回这列的最大/最小值
- AVG 作用于某一数值列,并完全忽略NULL值,计算这列所有
非NULL行
的平均值 - SUM 作用于某一数值列,并将NULL当做0值,计算这列所有行的和
参考:
- SQL Aggregate Functions
- SQL CASE