一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

MySQL聚合函数实战:COUNT-SUM-AVG应用场景详解

时间:2026-05-20 09:30:02 编辑:袖梨 来源:一聚教程网

MySQL聚合函数是数据分析的利器,掌握COUNT、SUM、AVG三大核心函数能高效完成各类统计需求。下面通过实际案例详解它们的应用技巧。

MySQL聚合查询COUNT、SUM、AVG用法实战案例指南

本文重点讲解三大聚合函数的典型应用场景:数据计数、数值求和与平均值计算。通过用户表和新增订单表的关联操作,演示实际开发中的常见统计需求。

-- 创建订单表 order(注意order是关键字,用反引号包裹)CREATE TABLE `order` (    order_id INT PRIMARY KEY AUTO_INCREMENT,    user_id INT,  -- 关联用户表主键    amount DECIMAL(10,2),  -- 订单金额(保留2位小数)    create_time DATETIME DEFAULT NOW());
-- 插入订单测试数据INSERT INTO `order` (user_id, amount) VALUES (1, 99.90),(1, 199.90),(2, 59.90),(3, 299.90),(4, 159.90),(4, 89.90);

一、COUNT:计数(最常用)

该函数主要用于统计记录数量,根据实际需求可选择三种不同计数方式。

1. COUNT(*)

统计结果包含所有记录,包括NULL值,这是最通用的计数方法。

-- 1. 统计用户总数SELECT COUNT(*) AS user_total FROM user;-- 2. 统计性别为男的用户数SELECT COUNT(*) AS male_total FROM user WHERE gender = 1;-- 3. 统计订单总数SELECT COUNT(*) AS order_total FROM `order`;

2. COUNT(字段名)

仅统计指定字段非NULL值的记录数量。

-- 统计age字段非NULL的用户数(如果有用户age为NULL,会被排除)SELECT COUNT(age) AS age_not_null FROM user;

3. COUNT(DISTINCT 字段名)

计算字段中不重复的非NULL值数量。

-- 统计有订单的不同用户数(一个用户可能有多个订单,只算1次)SELECT COUNT(DISTINCT user_id) AS user_with_order FROM `order`;

COUNT避坑

注意区分使用场景:统计总数用COUNT(*),统计非空字段用COUNT(字段名)。

二、SUM:求和

该函数专门处理数值型字段的累加计算,自动忽略NULL值。

-- 1. 统计所有订单的总金额SELECT SUM(amount) AS total_amount FROM `order`;-- 2. 统计用户id=1的所有订单金额总和SELECT SUM(amount) AS user1_total FROM `order` WHERE user_id = 1;-- 3. 非数值字段求和(返回0,无意义)SELECT SUM(name) AS wrong_sum FROM user;

SUM避坑

仅对数值类型字段使用SUM函数,字符串等非数值类型返回结果无意义。

三、AVG:求平均

计算数值字段的平均值,计算公式为总和除以非NULL记录数。

-- 1. 计算所有用户的平均年龄SELECT AVG(age) AS avg_age FROM user;-- 2. 计算所有订单的平均金额(保留2位小数,用ROUND函数)SELECT ROUND(AVG(amount), 2) AS avg_amount FROM `order`;-- 3. 计算性别为女的用户平均年龄SELECT AVG(age) AS female_avg_age FROM user WHERE gender = 2;

AVG避坑

处理包含NULL值的字段时,建议使用IFNULL函数明确处理方式。

四、聚合查询实战案例

综合应用场景:统计年龄超20岁且有订单用户的各项指标。

SELECT     COUNT(DISTINCT u.id) AS target_user,  -- 符合条件的用户数    ROUND(AVG(u.age), 2) AS avg_age,      -- 平均年龄    SUM(o.amount) AS total_order_amount   -- 订单总金额FROM user uLEFT JOIN `order` o ON u.id = o.user_id  -- 关联用户表和订单表WHERE u.age > 20 AND o.user_id IS NOT NULL;  -- 有订单且年龄>20

五、总结

三大聚合函数各有所长:COUNT处理计数需求,SUM专注数值累加,AVG解决平均值计算。掌握它们的特性与适用场景,能大幅提升SQL数据处理效率。

热门栏目