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. 与窗口函数的区别

    • 聚合函数:返回单行结果
    • 窗口函数:保留多行原始数据,同时显示聚合结果
相关推荐
Vect__几秒前
MySQL 内连接和外连接:从匹配关系到业务查询
数据库·mysql
qq_150841995 分钟前
SQL的insert和update二合一指令
java·数据库·sql
2601_9647028910 分钟前
Claude Opus 5 API 开发实战:对话、文本生成与结构化输出
java·服务器·前端
聚焦前沿11 分钟前
水动力优化导流罩:原理、数据与实船验证
大数据·服务器·数据库·人工智能
Sayuanni%313 分钟前
Spring IOC
java·spring·rpc
风景的人生17 分钟前
流式输出与springboot中的响应式编程
java·spring boot·ai编程
万联WANFLOW23 分钟前
外贸独立站:服务器放海外国内后台卡,放国内海外客户打不开——这道两头难怎么破?
运维·网络·数据库·经验分享
长不胖的路人甲35 分钟前
斐波那契查找Java 实现 + 完整思路
java·开发语言
金海境科技41 分钟前
【服务器数据恢复】H3C CAS虚拟化平台HP存储qcow2文件损坏快照丢失数据恢复案例
服务器·数据库·经验分享
祐樹1 小时前
1987年5月25日下午15-17点出生性格、运势和命运
java