聚集函数(也叫聚合函数或组函数)是数据库中用于对一组数据进行汇总计算的函数,比如求和、平均、计数等。常用聚集函数包括COUNT()、SUM()、AVG()、MAX()、MIN()。例如,SELECT COUNT(*) FROM table; 可以快速统计行数。使用GROUP BY可以对数据分组聚合,如SELECT department, AVG(salary) FROM employees GROUP BY department; 这能帮你高效处理数据,轻松掌握核心技能。
COUNT函数详解
COUNT函数用于计算表的行数或非NULL值的数量。最基本的用法是COUNT(*)统计所有行,COUNT(column)只统计指定列非空值。例如:SELECT COUNT(*) FROM orders; 返回订单总数。注意,COUNT(DISTINCT column)可以统计唯一值,如统计不同客户数。
SUM和AVG函数
SUM函数计算数值列的总和,AVG计算平均值。示例:SELECT SUM(sales), AVG(sales) FROM products; 如果数据有NULL,AVG会忽略它们。结合GROUP BY:SELECT category, SUM(sales) FROM sales GROUP BY category; 这样就能按类别汇总销售额。
MAX和MIN函数
MAX返回最大值,MIN返回最小值,不仅限于数字,还适用于日期和字符串。例子:SELECT MAX(price), MIN(price) FROM items; 或SELECT MAX(order_date) FROM orders; 获取最新订单日期。这些函数在找出极值时非常实用。
GROUP BY与HAVING结合使用
GROUP BY用于分组,HAVING过滤分组结果(WHERE过滤行)。示例:SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000; 只显示平均薪资高于5000的部门。这比简单聚合更强大,帮助分析数据。
聚集函数注意事项
聚集函数不能直接与普通列混合,除非用GROUP BY。所有非聚集列必须在GROUP BY中。SELECT不能返回聚集值和非聚集列,除非分组。使用时确保数据类型匹配,避免NULL影响结果。
实际案例:销售数据分析
假设sales表有date, product, amount。查询:SELECT product, SUM(amount) as total, COUNT(*) as orders FROM sales GROUP BY product ORDER BY total DESC; 这能列出每个产品总销售额和订单数,按销售额降序,超级实用。
FAQ
Q: 聚集函数会忽略NULL值吗?
A: 是的,大多数聚集函数如SUM、AVG、COUNT(column)忽略NULL,只有COUNT(*)计算所有行。
Q: GROUP BY和WHERE的区别?
A: WHERE过滤分组前的行,HAVING过滤分组后的结果。
Q: 可以嵌套聚集函数吗?
A: 可以,如AVG(COUNT(*))在子查询中,但需小心性能。
Q: MySQL和SQL Server的聚集函数有差异吗?
A: 基本相同,但某些扩展函数如SQL Server的STRING_AGG不同。