SQL 聚集函数详解:轻松掌握数据分析的利器

在这里插入图片描述

1. 聚集函数的概念

聚集函数(Aggregate Functions) 是一种可以对一组行进行计算并返回单个值的函数。在数据库查询中,聚集函数广泛用于数据分析和报表生成。这些函数可以帮助我们从大量数据中提取有用的信息,而无需实际列出每一行的数据。常见的聚集操作包括:

  • 统计行数:计算表中符合条件的行数。
  • 求和:计算某些行的总和。
  • 找出最值:计算表中最大值、最小值或平均值。

聚集函数通常用于汇总信息而不是列出每一行的数据。这种方式可以减少查询的数据量,节省时间和资源。

2. AVG() 函数

AVG() 函数 用于计算指定列的平均值。它通过将列中的数值加总,然后除以行数,返回一个平均值。AVG() 函数可以用于计算表中所有行的平均值,或仅计算符合特定条件的行的平均值。

示例 1:计算所有产品的平均价格

SELECT AVG(prod_price) AS avg_price
FROM Products;
avg_price
---------
6.823333

解析:这条查询语句返回 Products 表中所有产品的平均价格,并将结果命名为 avg_price

示例 2:计算特定供应商的产品平均价格

SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
avg_price
---------
6.823333

解析:通过在 WHERE 子句中指定供应商 ID 作为过滤条件,这条查询语句返回供应商 DLL01 提供的产品的平均价格。

3. COUNT() 函数

COUNT() 函数 用于统计行数。它有两种主要的使用方式:

  • COUNT(*):统计表中的所有行,包括包含 NULL 值的行。
  • COUNT(column):统计某一列中非空值的行数,忽略 NULL 值。

示例 1:计算 Customers 表中的总客户数

SELECT COUNT(*) AS num_cust
FROM Customers;
num_cust
--------
5

解析:这条查询语句计算 Customers 表中的所有行数,并将结果命名为 num_cust

示例 2:统计 Customers 表中具有电子邮件地址的客户数量

SELECT COUNT(cust_email) AS num_cust
FROM Customers;
num_cust
--------
3

解析:这条查询语句只统计 cust_email 列中非空值的行数,返回具有电子邮件地址的客户数。

4. MAX() 函数

MAX() 函数 用于返回指定列中的最大值。通常用于找出数值列或日期列的最大值。对于文本列,MAX() 函数返回字母顺序排列中最后的那个值。

示例 1:获取 Products 表中最贵的产品价格

SELECT MAX(prod_price) AS max_price
FROM Products;
max_price
---------
11.9900

解析:这条查询语句返回 Products 表中价格最高的商品价格,并将结果命名为 max_price

5. MIN() 函数

MIN() 函数 与 MAX() 函数相反,用于返回指定列中的最小值。它常用于找出数值列或日期列中的最小值。

示例 1:获取 Products 表中最便宜的产品价格

SELECT MIN(prod_price) AS min_price
FROM Products;
min_price
---------
3.4900

解析:这条查询语句返回 Products 表中价格最低的商品价格,并将结果命名为 min_price

6. 总结

聚集函数是 SQL 中的强大工具,能够对大量数据进行汇总计算,提供诸如平均值、总和、最大值、最小值以及行数等重要信息。这些函数能够极大地简化数据分析工作,减少数据处理的复杂度,并且在多种数据库管理系统中都得到了广泛的支持。

7. SUM() 函数

SUM() 函数 用于计算指定列中数值的总和。它在统计、财务报表等需要对数值进行累加的场景中非常有用。

示例 1:计算所有订单项的总数量

SELECT SUM(quantity) AS total_quantity
FROM OrderItems;
total_quantity
--------------
143

解析:这条查询语句计算 OrderItems 表中所有订单项的数量总和,并将结果命名为 total_quantity

示例 2:计算特定订单的总金额

SELECT SUM(item_price * quantity) AS order_total
FROM OrderItems
WHERE order_num = 20005;
order_total
-----------
149.25

解析:通过计算每个订单项的金额(item_price * quantity)并对其求和,这条查询语句得出订单编号为 20005 的总金额。

8. 组合使用聚集函数

在实际应用中,常常需要组合使用多个聚集函数,以获取更全面的数据分析结果。

示例 1:获取每个供应商的产品数量、最贵产品价格、最便宜产品价格和平均产品价格

SELECT vend_id,
       COUNT(*) AS product_count,
       MAX(prod_price) AS max_price,
       MIN(prod_price) AS min_price,
       AVG(prod_price) AS avg_price
FROM Products
GROUP BY vend_id;
vend_id | product_count | max_price | min_price | avg_price
--------|---------------|-----------|-----------|----------
BRE02   | 3             | 5.49      | 3.49      | 4.49
DLL01   | 4             | 11.99     | 7.45      | 9.32
FNG01   | 2             | 5.49      | 4.99      | 5.24

解析

  • vend_id:供应商 ID。
  • COUNT(*):统计每个供应商提供的产品数量。
  • MAX(prod_price):每个供应商提供的最贵产品价格。
  • MIN(prod_price):每个供应商提供的最便宜产品价格。
  • AVG(prod_price):每个供应商产品的平均价格。
  • GROUP BY vend_id:按照供应商分组,分别计算上述聚集值。

9. 使用 HAVING 子句过滤聚集结果

HAVING 子句用于过滤聚集函数的结果,与 WHERE 子句不同,HAVING 作用于聚合后的结果集。

示例 1:查找提供超过 2 个产品的供应商

SELECT vend_id,
       COUNT(*) AS product_count
FROM Products
GROUP BY vend_id
HAVING COUNT(*) > 2;
vend_id | product_count
--------|--------------
BRE02   | 3
DLL01   | 4

解析

  • GROUP BY vend_id:按照供应商分组。
  • COUNT(*) AS product_count:统计每个供应商的产品数量。
  • HAVING COUNT(*) > 2:只返回产品数量超过 2 的供应商。

10. 使用 DISTINCT 关键字与 COUNT() 函数

DISTINCT 关键字可以与 COUNT() 函数组合,统计列中唯一值的数量。

示例 1:统计客户所在的不同国家数量

SELECT COUNT(DISTINCT cust_country) AS country_count
FROM Customers;
country_count
-------------
3

解析:这条查询语句统计 Customers 表中不同国家的数量,即有多少个不同的国家。

11. 在聚集函数中处理 NULL 值

聚集函数在处理包含 NULL 值的列时,会自动忽略这些值。但在某些情况下,需要明确考虑或处理 NULL 值。

示例 1:统计产品描述不为空的产品数量

SELECT COUNT(prod_desc) AS desc_count
FROM Products;
desc_count
----------
9

解析:如果 Products 表中共有 10 条记录,但有一条记录的 prod_descNULL,那么 COUNT(prod_desc) 将返回 9,因为它忽略了 NULL 值。

示例 2:统计产品总数,包括 NULL

SELECT COUNT(*) AS total_products
FROM Products;
total_products
--------------
10

解析COUNT(*) 计算所有行数,包括包含 NULL 值的行,因此返回 10。

通过以上更详细的示例,可以更深入地理解聚集函数在 SQL 查询中的应用。这些函数不仅可以单独使用,还可以组合使用,并与其他 SQL 语句如 GROUP BYHAVINGDISTINCT 等结合,实现复杂的数据分析需求。

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。


无论你是AI新手还是AI专家,学习最前沿的AI技术,AI创富俱乐部你值得拥有!

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值