0

0

数据库聚合函数是什么?聚合函数的类型、用法及实例详解

星夢妙者

星夢妙者

发布时间:2025-07-21 09:53:01

|

864人浏览过

|

来源于php中文网

原创

聚合函数是数据库中用于对多行数据进行计算并返回单个结果的函数,常见类型包括count()统计行数、sum()求和、avg()计算平均值、min()取最小值、max()取最大值;它们常与group by结合实现分组汇总,并需注意where在分组前过滤、having在分组后过滤、distinct用于唯一值统计、null值默认被忽略等关键点。

数据库聚合函数是什么?聚合函数的类型、用法及实例详解

数据库聚合函数,简单来说,就是对一组值执行计算并返回单个值的函数。它们不像普通函数那样对每一行数据独立操作,而是汇总多行数据,给出像总数、平均值、最大值或最小值这样的结果。这在数据分析和报表生成中非常有用,能帮我们从大量原始数据中提炼出有意义的概览信息。

数据库聚合函数是什么?聚合函数的类型、用法及实例详解

聚合函数的核心作用,就是把“多”变成“一”。想象一下,你有一张销售订单表,每一行都是一笔交易。如果你想知道这个月总共卖了多少钱,或者平均每笔订单的金额是多少,你不可能一行一行去加。这时候,聚合函数就派上用场了。它们提供了一种高效、声明式的方式来处理这种群体性的数据计算需求。

常见的聚合函数有哪些,它们分别做什么?

数据库里最常用的聚合函数,其实也就那么几个,但它们组合起来能解决的问题可不少。

数据库聚合函数是什么?聚合函数的类型、用法及实例详解
  • COUNT(): 这个函数用来计算行数。比如 COUNT(*) 会计算表里所有行的数量,而 COUNT(column_name) 则会计算指定列非NULL值的行数。我个人用 COUNT(*) 比较多,因为它最直接,能告诉我“这里到底有多少条记录”。但如果你想知道某个字段有多少个非空值,COUNT(column_name) 就很精准了。
  • SUM(): 顾名思义,求和。它会把指定数值列的所有值加起来。比如你想算总销售额,SUM(sales_amount) 就是你的朋友。
  • AVG(): 计算平均值。这个函数会把指定数值列的所有值加起来,再除以非NULL值的数量。AVG(price) 就能告诉你商品平均售价是多少。
  • MIN(): 找出指定列的最小值。想知道最便宜的商品价格?MIN(price)
  • MAX(): 找出指定列的最大值。想知道最贵的商品价格?MAX(price)

这些函数看起来简单,但它们是构建复杂查询的基础。比如,我们可能需要找出某个产品类别下的最高销量,或者某个区域的总用户数,这些都离不开它们。

如何结合GROUP BY子句使用聚合函数?

聚合函数单独用的时候,是对整个结果集进行计算。但更多时候,我们希望对数据进行分组,然后对每个组进行聚合。这时候,GROUP BY 子句就登场了,它和聚合函数简直是天作之合。

数据库聚合函数是什么?聚合函数的类型、用法及实例详解

GROUP BY 的作用是把具有相同值的行分组。比如,你有一张订单表,你想知道每个客户的总消费金额。你就不能直接 SUM(amount),因为那会给出所有客户的总额。你需要先按客户ID进行分组,然后对每个组内的订单金额求和。

举个例子,假设我们有张 orders 表,包含 customer_idorder_amount

SELECT
    customer_id,
    SUM(order_amount) AS total_spent
FROM
    orders
GROUP BY
    customer_id;

这段SQL会先根据 customer_id 把所有订单分成不同的组,然后对每个组内的 order_amount 进行求和。结果就是每个客户ID对应的总消费金额。

这里有个我经常会犯的小错误,或者说新手常犯的:SELECT 语句中,除了聚合函数之外,所有非聚合的列都必须出现在 GROUP BY 子句中。否则数据库会报错,因为它不知道你这些非聚合的列该怎么“聚合”到每个组里。这其实很好理解,你分了组,那每组的结果就只能是组的共同特征或者聚合结果,不能是组里某个不确定的单行数据。

使用聚合函数时有哪些高级用法和常见陷阱?

聚合函数的使用远不止 GROUP BY 那么简单,还有一些高级技巧和需要注意的地方,它们能让你的查询更强大,也能让你少踩坑。

1. HAVING 子句与 WHERE 子句的区别

很多人刚开始会把 HAVINGWHERE 搞混。WHERE 是在数据被分组之前进行过滤的,它针对的是原始行。而 HAVING 是在数据被分组之后进行过滤的,它针对的是聚合结果。

PHP高级开发技巧与范例
PHP高级开发技巧与范例

PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书

下载

比如,你想找出平均消费金额超过1000元的客户:

SELECT
    customer_id,
    AVG(order_amount) AS avg_spent
FROM
    orders
GROUP BY
    customer_id
HAVING
    AVG(order_amount) > 1000;

如果你想过滤掉订单金额小于50的订单,再计算平均值,那 WHERE 就派上用场了:

SELECT
    customer_id,
    AVG(order_amount) AS avg_spent
FROM
    orders
WHERE
    order_amount >= 50 -- 先过滤掉小额订单
GROUP BY
    customer_id
HAVING
    AVG(order_amount) > 1000;

理解这个顺序很重要:WHERE -> GROUP BY -> HAVING。这决定了你的数据在哪个阶段被筛选。

2. DISTINCT 关键字与聚合函数:

DISTINCT 可以在聚合函数内部使用,用来计算唯一值的聚合。比如,你想知道有多少个不同的客户下了订单:

SELECT COUNT(DISTINCT customer_id) FROM orders;

这会只计算不重复的客户ID的数量。这在统计独立用户、独立商品等场景非常有用。

3. NULL 值处理:

聚合函数在计算时,通常会忽略 NULL 值。这是一个很重要的特性,也可能是一个陷阱。

  • COUNT(*) 会计算所有行,包括那些包含 NULL 值的行。
  • COUNT(column_name) 只计算 column_name 列中非 NULL 值的行。
  • SUM(), AVG(), MIN(), MAX() 都会忽略 NULL 值。

举个例子,如果你有 score 列,其中有些是 NULLAVG(score) 只会计算那些有分数的学生的平均分,而不会把 NULL 当作0或者其他值参与计算。如果你希望 NULL 值参与计算(比如当作0),你需要在使用聚合函数前用 COALESCEIFNULL 等函数进行处理。

-- 将NULL分数视为0参与平均值计算
SELECT AVG(COALESCE(score, 0)) FROM students;

4. 性能考量:

聚合函数,特别是与 GROUP BY 结合时,可能会涉及到大量的数据扫描和排序,这会影响查询性能。当处理超大数据量时,索引的建立、合理的分区策略,以及避免在 WHERE 子句中对索引列使用函数(这会导致索引失效)等,都是需要考虑的优化点。有时候,预先计算和存储聚合结果(比如物化视图)也是一种常用的优化手段。

总的来说,聚合函数是数据库查询中不可或缺的工具。它们让我们可以从宏观层面理解数据,发现模式和趋势。掌握它们的类型、用法以及一些高级特性和注意事项,能让你在数据分析的路上走得更远,写出更高效、更准确的SQL查询。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

685

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1117

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

359

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

717

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

577

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

419

2024.04.29

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

ASP 教程
ASP 教程

共34课时 | 3.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号