mysql聚合函数,灵活组合可满足复杂的统计需求

首页 2025-09-20 10:37:40


MySQL 聚合函数用于对一组数据进行计算并返回单一结果,常用于 GROUP BY 子句配合统计分析场景。以下是常用的聚合函数及用法:

1. COUNT():统计记录数

  • 功能:返回查询结果的行数。
  • 语法:
    sql
    COUNT(expr)  -- 统计expr非NULL值的数量
    COUNT(*)     -- 统计所有记录(包括NULL)
    COUNT(1)     -- 同COUNT(*),效率相近
    
     
     
  • 示例:
    sql
    -- 统计用户表总人数
    SELECT COUNT(*) AS total_users FROM users;
    
    -- 统计有邮箱的用户数(排除NULL)
    SELECT COUNT(email) AS users_with_email FROM users;
    
     
     

2. SUM():求和

  • 功能:计算数值列的总和(忽略 NULL)。
  • 语法:SUM(column)
  • 示例:
    sql
    -- 计算所有订单的总金额
    SELECT SUM(amount) AS total_amount FROM orders;
    
    -- 计算某用户的订单总金额
    SELECT SUM(amount) AS user_total FROM orders WHERE user_id = 100;
    
     
     

3. AVG():求平均值

  • 功能:计算数值列的平均值(忽略 NULL)。
  • 语法:AVG(column)
  • 示例:
    sql
    -- 计算产品的平均价格
    SELECT AVG(price) AS avg_price FROM products;
    
    -- 计算某类别产品的平均评分
    SELECT AVG(rating) AS avg_rating FROM products WHERE category = 'books';
    
     
     

4. MAX():求最大值

  • 功能:返回列中的最大值(适用于数值、字符串、日期等类型)。
  • 语法:MAX(column)
  • 示例:
    sql
    -- 查找最高的产品价格
    SELECT MAX(price) AS max_price FROM products;
    
    -- 查找最新的订单日期
    SELECT MAX(order_date) AS latest_order FROM orders;
    
     
     

5. MIN():求最小值

  • 功能:返回列中的最小值(与MAX()类似,支持多类型)。
  • 语法:MIN(column)
  • 示例:
    sql
    -- 查找最低的产品价格
    SELECT MIN(price) AS min_price FROM products;
    
    -- 查找最早的注册日期
    SELECT MIN(register_date) AS earliest_reg FROM users;
    
     
     

6. GROUP_CONCAT():合并字符串

  • 功能:将分组中的字符串连接成一个字符串(需配合GROUP BY使用)。
  • 语法:GROUP_CONCAT([DISTINCT] column [SEPARATOR '分隔符'])
  • 示例:
    sql
    -- 按类别分组,合并产品名称(用逗号分隔)
    SELECT 
      category,
      GROUP_CONCAT(product_name SEPARATOR ', ') AS products
    FROM products
    GROUP BY category;
    
    -- 去重并合并用户标签
    SELECT 
      user_id,
      GROUP_CONCAT(DISTINCT tag) AS tags
    FROM user_tags
    GROUP BY user_id;
    
     
     

7. 配合 GROUP BY 使用

聚合函数常与 GROUP BY 结合,实现分组统计:
sql
-- 按用户分组,统计每个用户的订单数和总消费
SELECT 
  user_id,
  COUNT(order_id) AS order_count,  -- 订单数
  SUM(amount) AS total_spent       -- 总消费
FROM orders
GROUP BY user_id;  -- 按user_id分组
 

8. HAVING 筛选聚合结果

WHERE 不能直接筛选聚合函数的结果,需用 HAVING
sql
-- 筛选订单数超过5的用户
SELECT 
  user_id,
  COUNT(order_id) AS order_count
FROM orders
GROUP BY user_id
HAVING order_count > 5;  -- 对聚合结果筛选
 

注意事项:

  • 聚合函数会自动忽略 NULL 值(COUNT(*) 除外)。
  • 若需对 NULL 视为 0 参与计算,可结合 IFNULL(),例如 SUM(IFNULL(score, 0))
  • DISTINCT 可用于去重计算,如 COUNT(DISTINCT user_id) 统计不同用户的数量。
这些函数是数据分析和报表生成的基础,灵活组合可满足复杂的统计需求。
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道