使用CASE表达式结合AVG函数可实现条件求平均,如select AVG(CASE WHEN region = ‘North’ THEN amount ELSE NULL END) FROM sales,利用AVG忽略NULL的特性,仅对满足条件的值计算平均值。
在 sql 中实现条件求平均,通常使用 CASE 表达式 结合 AVG() 函数来完成。你可以在 AVG() 内部通过 CASE 判断某些条件是否满足,只对符合条件的记录进行计算,从而实现“条件求平均”。
使用 CASE 配合 AVG 实现条件平均
假设有一张销售表 sales,包含字段:employee_id、amount、region。你想计算某个地区(比如 ‘North’)的平均销售额,可以这样写:
示例:
SELECT AVG(CASE WHEN region = 'North' THEN amount ELSE NULL END) AS avg_north_amount FROM sales;
说明:当 region = ‘North’ 时,取 amount 参与平均;否则返回 NULL,而 AVG() 会自动忽略 NULL 值。
排除特定条件的数据
如果你只想对满足某条件的数据求平均,也可以直接用 WHERE 过滤,更简洁:
SELECT AVG(amount) AS avg_north_amount FROM sales WHERE region = 'North';
这种方式适用于全局条件。但当你需要在同一查询中对比多个条件的平均值时,CASE 更灵活。
多条件分组平均(带条件的分组统计)
如果你想按员工分别计算他们在不同区域的平均销售额,可以用 GROUP BY 配合条件表达式:
SELECT employee_id, AVG(CASE WHEN region = 'North' THEN amount END) AS avg_north, AVG(CASE WHEN region = 'South' THEN amount END) AS avg_south FROM sales GROUP BY employee_id;
每个员工一行,分别显示其在 North 和 South 区域的平均销售额,不满足条件的为 NULL,不影响 AVG 计算。
基本上就这些。关键是理解:AVG 会跳过 NULL,所以用 CASE 控制哪些值参与计算即可实现条件平均。根据场景选择 WHERE 简单过滤或 CASE 多维度统计。