typora-copy-images-to: SQL 必知必会
SQL 必知必会 Chapter 9 汇总数据
9.1 聚集函数
-
我们需要汇总数据而不用实际检索出来
- 确定表中行数
- 获得表中某些行的和
- 找出表列的最大、最小、平均值
-
聚集函数是指对某些行运行的函数,计算并返回一个值

- AVG()函数——平均值函数
SELECT AVG(prod_price) AS avg_price
FROM Products;
# 可以包括 WHERE 子句
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
# AVG()函数忽略列值为NULL的行
# 获得多列的平均值,必须使用多个AVG()函数
-
COUNT()函数
-
使用COUNT(*) 对表中行的数目进行计数,不管表列中是空值还是非空值
-
使用COUNT(COLUMN)函数对特定列中具有值的行进行计数,忽略NULL
SELECT COUNT(*) AS num_cust
FROM Customers;
# 不管行中各列有什么值
SELECT COUNT(cust_email) AS num_cust
FROM Customers;
# 说明: NULL 值
# 如果指定列名,则 COUNT() 函数会忽略指定列的值为空的行,但如果
# COUNT() 函数中用的是星号( * ),则不忽略
- MAX()函数
- 返回列中的最大值,要求制定列名
SELECT MAX(prod_price) AS max_price
FROM Products;
# 在用于文本数据时, MAX() 返回按该列排序后的最后一行
# MAX() 函数忽略列值为 NULL 的行
- MIN()函数
- 返回列中的最小值,要求制定列名
SELECT MIN(prod_price) AS min_price
FROM Products;
# 提示:对非数值数据使用 MIN()
# 虽然 MIN() 一般用来找出最小的数值或日期值,但许多(并非所有)
# DBMS 允许将它用来返回任意列中的最小值,包括返回文本列中的最小值。在用于文本# 数据时, MIN() 返回该列排序后最前面的行
- SUM()函数
- 用来返回指定列值的和(总计)
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;
# 合计每项物品的item_price*quantity ,得出总的订单金额
SELECT SUM(item_price*quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005
# 利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算
9.2 聚集不同值
- 对所有行执行计算,指定 ALL 参数或不指定参数(因为 ALL 是默认行为)
- 只包含不同的值,指定 DISTINCT 参数
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
# 在使用了 DISTINCT 后,此例子中的 avg_price 比较高,因
# 为有多个物品具有相同的较低价格。排除它们提升了平均价格
# DISTINCT 不能用于 COUNT(*)
9.3 组合聚集函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;
# 在指定别名以包含某个聚集函数的结果时,不应该使用表中实际的列名
9.4 小结
- 聚集函数用来汇总数据。SQL 支持 5 个聚集函数,可以用多种方法使用
它们,返回所需的结果。这些函数很高效,它们返回结果一般比你在自
己的客户端应用程序中计算要快得多