SQL聚合函数功能与用法详解

SQL聚合函数详解

一、什么是聚合函数

聚合函数是对一组值执行计算并返回单个值的函数,主要用于数据汇总和统计。它们通常与 GROUP BY 子句结合使用,对数据分组后进行汇总计算。

二、主要聚合函数

1. COUNT - 计数函数

sql 复制代码
-- 统计总行数(包括NULL值)
SELECT COUNT(*) FROM orders;

-- 统计特定列非空值的数量
SELECT COUNT(customer_id) FROM orders;

-- 统计唯一值的数量
SELECT COUNT(DISTINCT product_id) FROM order_items;

特点

  • COUNT(*) 统计所有行,包括NULL
  • COUNT(column) 只统计非NULL值
  • 可以结合 DISTINCT 统计唯一值数量

2. SUM - 求和函数

sql 复制代码
-- 计算销售总额
SELECT SUM(amount) FROM sales;

-- 计算每个客户的总消费
SELECT customer_id, SUM(order_total) 
FROM orders 
GROUP BY customer_id;

-- 结合条件筛选
SELECT SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) 
FROM transactions;

特点

  • 只能用于数值类型
  • 忽略NULL值
  • 常用于财务、统计计算

3. AVG - 平均值函数

sql 复制代码
-- 计算平均销售额
SELECT AVG(sale_amount) FROM sales;

-- 计算每个部门的平均工资
SELECT department, AVG(salary) 
FROM employees 
GROUP BY department;

-- 保留两位小数
SELECT ROUND(AVG(price), 2) FROM products;

特点

  • 只计算数值类型
  • 忽略NULL值
  • 常与 ROUND() 结合控制小数位数

4. MIN - 最小值函数

sql 复制代码
-- 查找最低价格
SELECT MIN(price) FROM products;

-- 查找每个类别的最早创建日期
SELECT category, MIN(created_date) 
FROM products 
GROUP BY category;

-- 可用于非数值类型
SELECT MIN(product_name) FROM products; -- 按字母顺序

特点

  • 可用于数值、日期、字符串等类型
  • 对于字符串,按字母顺序比较
  • 忽略NULL值

5. MAX - 最大值函数

sql 复制代码
-- 查找最高价格
SELECT MAX(price) FROM products;

-- 查找每个部门的最高薪资
SELECT department, MAX(salary) 
FROM employees 
GROUP BY department;

-- 查找最近订单日期
SELECT MAX(order_date) FROM orders;

特点

  • 可用于多种数据类型
  • 与MIN相反,查找最大值
  • 忽略NULL值

三、聚合函数使用示例

基本查询示例

sql 复制代码
-- 综合使用多个聚合函数
SELECT 
    COUNT(*) as total_orders,
    SUM(amount) as total_sales,
    AVG(amount) as avg_sale,
    MIN(amount) as min_sale,
    MAX(amount) as max_sale
FROM orders
WHERE order_date >= '2024-01-01';

结合GROUP BY使用

sql 复制代码
-- 按月份统计销售数据
SELECT 
    EXTRACT(MONTH FROM order_date) as month,
    COUNT(*) as order_count,
    SUM(amount) as monthly_sales,
    AVG(amount) as avg_order_value
FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024
GROUP BY EXTRACT(MONTH FROM order_date)
ORDER BY month;

结合HAVING子句

sql 复制代码
-- 筛选出总销售额超过10000的客户
SELECT 
    customer_id,
    COUNT(*) as order_count,
    SUM(amount) as total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 10000;

四、重要注意事项

  1. NULL值处理

    • COUNT(*) 外,所有聚合函数都忽略NULL值
    • 使用 COALESCE() 处理NULL值:AVG(COALESCE(column, 0))
  2. 性能考虑

    • 在大数据表上使用聚合函数可能影响性能
    • 适当使用索引可以提高聚合查询效率
  3. 数据类型限制

    • SUM()AVG() 只能用于数值类型
    • MIN()MAX() 可用于多种数据类型
  4. DISTINCT关键字

    sql 复制代码
    -- 计算不同客户的数量
    SELECT COUNT(DISTINCT customer_id) FROM orders;
    
    -- 计算不同价格的平均值
    SELECT AVG(DISTINCT price) FROM products;
  5. 与窗口函数的区别

    • 聚合函数:返回单行结果
    • 窗口函数:保留多行原始数据,同时显示聚合结果
相关推荐
光羽隹衡2 小时前
MySQL的安装
数据库·mysql
脸大是真的好~2 小时前
尚硅谷-mysql专项训练-数据库服务的优化-慢查询-EXPLAIN字段
数据库·mysql·性能优化
梦未2 小时前
Spring控制反转与依赖注入
java·后端·spring
喜欢流萤吖~2 小时前
Lambda 表达式
java
Dragon online2 小时前
数据分析师成长之路--从SQL恐惧到数据掌控者的蜕变
数据库·sql
ZouZou老师2 小时前
C++设计模式之适配器模式:以家具生产为例
java·设计模式·适配器模式
曼巴UE52 小时前
UE5 C++ 动态多播
java·开发语言
VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue音乐管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
一招定胜负3 小时前
navicat连接数据库&mysql常见语句及操作
数据库·mysql