欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 数据库聚合函数与分组使用指南

数据库聚合函数与分组使用指南

2025/4/5 8:59:30 来源:https://blog.csdn.net/wange6906/article/details/146944813  浏览:    关键词:数据库聚合函数与分组使用指南

数据库中的聚合函数用于对一组值进行计算并返回单个结果。以下是关键点总结:

常见聚合函数

  1. COUNT():统计行数。

    • COUNT(*) 统计所有行,包括NULL。

    • COUNT(列名) 统计非NULL值的数量。

  2. SUM():计算数值列的总和,忽略NULL。

  3. AVG():计算数值列的平均值,忽略NULL。

  4. MAX()/MIN():返回列的最大/最小值,适用于数值、日期或字符串。

  5. 其他:如STDDEV()(标准差)、VARIANCE()(方差)。


GROUP BY 子句

  • 用途:按指定列分组后进行聚合。

  • 语法

    SELECT 列1, 聚合函数(列2)
    FROM 表
    GROUP BY 列1;

  • 规则:SELECT中的非聚合列必须出现在GROUP BY中。

示例:按部门统计平均工资

SELECT department, AVG(salary)
FROM employees
GROUP BY department;

HAVING 子句

  • 用途:过滤聚合后的结果(在GROUP BY之后生效)。

  • 与WHERE的区别

    • WHERE在聚合前过滤行。

    • HAVING在聚合后过滤分组。

示例:筛选平均工资>5000的部门

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;

关键注意事项

  1. NULL处理

    • 聚合函数(如SUMAVG)忽略NULL。

    • COUNT(列名)统计非NULL值,COUNT(*)统计所有行。

  2. DISTINCT:在聚合函数中处理唯一值。

    sql

    复制

    SELECT COUNT(DISTINCT department) FROM employees;
  3. 排序结果:使用ORDER BY对聚合结果排序。

    SELECT department, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department
    ORDER BY avg_salary DESC;


高级分组

  • ROLLUP/CUBE:生成多层次聚合(如小计、总计)。

    -- ROLLUP示例(按部门和性别组合统计)
    SELECT department, gender, COUNT(*)
    FROM employees
    GROUP BY ROLLUP(department, gender);


错误示例

  • 错误:SELECT中包含未分组的非聚合列。

    sql

    复制

    -- 错误:department未在GROUP BY中
    SELECT department, AVG(salary) FROM employees;
  • 正确:使用GROUP BY或聚合函数。

    SELECT department, AVG(salary)
    FROM employees
    GROUP BY department;


性能与最佳实践

  • 在连接表时聚合:确保连接条件正确,避免数据重复。

    SELECT e.department, SUM(s.amount)
    FROM employees e
    JOIN sales s ON e.id = s.employee_id
    GROUP BY e.department;

  • 使用索引优化GROUP BY查询。

  • 注意数据库的SQL模式(如MySQL的ONLY_FULL_GROUP_BY)。


聚合函数是数据分析的核心工具,合理使用GROUP BYHAVING能高效完成复杂的数据汇总任务。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词