第9课、汇总数据
(1)聚集函数
对某列的多行数值进行汇总,比如求某列中所有行的值之间得出的平均值,总和,最大小值等。
表9-1 SQL 聚集函数
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM | 返回某列值之和 |
1)AVG() 函数 |
需求:计算 Products 表中所有产品的平均价格。
SELECT AVG(prod_price) AS avg_price
FROM Products;
输出结果:
avg_price
---------
6.823333
需求:计算 供应商为 DLL01的所有产品的平均价格。
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
输出结果:
avg_price
---------
3.865000
2)COUNT() 函数 |
需求:计算 Customers 表中顾客的总数。
SELECT COUNT(*) AS num_cust
FROM Customers;
输出结果:
num_cust
--------
5
需求:计算只对具有电子邮件地址的客户总数。
SELECT COUNT(cust_email) AS num_cust
FROM Customers;
输出结果:
num_cust
--------
3
--若该 cust_email 列存在 NULL 值,则不计数
3)MAX() 函数 |
需求:计算 Products 表中最贵物品的价格。
SELECT MAX(prod_price) AS max_price
FROM Products;
输出结果:
max_price
---------
11.99
MIN()、SUM 跟 MAX 用法差不多,就不再做这个笔记了。
(2)聚集不同值
以上5个聚集函数(即表9-1 SQL 聚集函数)都可使用:
- 对所有执行计算的出来的值,指定 ALL 参数(ALL 是默认的,也可不用设置该参数)
- 只包含不同的值,指定 DISTINCT 参数。
4)DISTINCT 不能用于 COUNT(通配符) |
需求:由于产品中存在相同的价格值,会导致不能准确得出平均价格值。因此需要排除物品相同的价格,而只使用一个相同的值作为代表,来计算所有物品的平均价格。
-- 过滤掉 prod_price 列的重复值,只取一个作为代表值。
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
输出结果:
avg_price
---------
4.240000
(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;
输出结果:
num_items | price_min | price_max | price_avg
---------------------------------------------
9 | 3.49 | 11.99 | 6.823333