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

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

常见聚合函数

  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能高效完成复杂的数据汇总任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lifewange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值