sql聚合函数用于数据汇总,count统计行数,如count(*)统计所有行,count(column_name)统计非空值;sum计算数值总和,如sum(order_amount),仅适用于数值列;avg计算平均值,如avg(order_amount),可结合coalesce处理null;min和max分别找出最小值和最大值,适用于数值、日期、字符串等类型;group by将数据分组后应用聚合函数,如按user_id统计订单金额;where在聚合前过滤数据,如筛选2023年订单;having在聚合后过滤结果,如筛选总金额大于1000的用户;聚合函数可在子查询中使用,如查找高于平均订单金额的记录;优化方法包括创建索引、选择合适数据类型、减少计算量、重写查询及理解数据库优化器机制。

SQL聚合函数用于对一组数据进行计算,返回单个汇总值。 掌握它们能让你从数据库中提取更有意义的信息,而不仅仅是原始数据。

SQL聚合函数,就像数据库里的瑞士军刀,能帮你快速汇总数据,但用不好也容易出问题。

解决方案
-
COUNT:计数

最基础的,
COUNT(*)统计所有行数,COUNT(column_name)统计指定列非空值的数量。 你可能遇到过需要统计用户表中注册用户总数的情况,SELECT COUNT(*) FROM users;一行搞定。 但要注意,COUNT(column_name)会忽略 NULL 值。 曾经我就因为没注意到这一点,统计订单数量时漏掉了部分未填写地址的订单。 -
SUM:求和
SUM(column_name)计算指定列的总和。 比如计算订单总金额,SELECT SUM(order_amount) FROM orders;。 注意,SUM只能用于数值类型的列,否则会报错。 遇到非数值类型的列,需要先进行类型转换,比如使用CAST或CONVERT函数。 -
AVG:求平均值
AVG(column_name)计算指定列的平均值。 例如,计算平均订单金额,SELECT AVG(order_amount) FROM orders;。AVG也会忽略 NULL 值。 如果你想将 NULL 值也纳入计算,需要先使用COALESCE函数将 NULL 值替换为 0 或者其他合适的默认值。 -
MIN:求最小值
MIN(column_name)找出指定列的最小值。 比如找出最早的订单日期,SELECT MIN(order_date) FROM orders;。MIN可以用于数值、日期、字符串等类型的列。 -
MAX:求最大值
MAX(column_name)找出指定列的最大值。 例如,找出最晚的订单日期,SELECT MAX(order_date) FROM orders;。MAX的用法和MIN类似,也适用于多种数据类型。
如何结合GROUP BY使用聚合函数?
GROUP BY 允许你将数据分组,然后对每个组应用聚合函数。 比如,你想统计每个用户的订单总金额,可以这样写:SELECT user_id, SUM(order_amount) FROM orders GROUP BY user_id;。 GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。 另外,SELECT 列表中除了聚合函数外,其他列都必须出现在 GROUP BY 子句中。
聚合函数与WHERE子句的配合使用
WHERE 子句用于在聚合之前过滤数据。 例如,你想统计 2023 年的订单总金额,可以这样写:SELECT SUM(order_amount) FROM orders WHERE YEAR(order_date) = 2023;。 WHERE 子句在聚合之前执行,因此可以有效地减少需要处理的数据量,提高查询效率。
HAVING子句的作用是什么?它与WHERE有什么区别?
HAVING 子句用于在聚合之后过滤数据。 它与 WHERE 的主要区别在于,WHERE 作用于原始数据行,而 HAVING 作用于聚合后的结果集。 例如,你想找出订单总金额超过 1000 元的用户,可以这样写:SELECT user_id, SUM(order_amount) FROM orders GROUP BY user_id HAVING SUM(order_amount) > 1000;。 HAVING 子句必须与 GROUP BY 子句一起使用。
聚合函数在子查询中的应用场景有哪些?
聚合函数经常在子查询中使用,用于计算一些中间结果,供外部查询使用。 例如,你想找出订单金额大于平均订单金额的订单,可以这样写:SELECT * FROM orders WHERE order_amount > (SELECT AVG(order_amount) FROM orders);。 子查询可以嵌套多层,但要注意查询的性能,避免过度复杂的子查询。
如何优化包含聚合函数的SQL查询?
优化包含聚合函数的 SQL 查询,可以从以下几个方面入手:
-
索引: 在经常用于
WHERE和GROUP BY子句的列上创建索引,可以显著提高查询效率。 - 数据类型: 确保用于聚合的列的数据类型是合适的。 例如,如果只需要整数,就不要使用浮点数类型。
- 避免不必要的计算: 尽量在聚合之前过滤数据,减少需要处理的数据量。
- 查询重写: 有时候,可以通过重写查询来避免使用聚合函数,从而提高查询效率。 例如,可以使用窗口函数来替代某些聚合函数。
- 数据库优化器: 了解数据库的优化器是如何工作的,可以帮助你编写更高效的 SQL 查询。










