MySQL按多列分组计算指定列平均值的实现方法
MySQL按多字段分组计算列平均值实现方法
核心实现逻辑是通过GROUP BY指定多个分组维度字段,搭配AVG()聚合函数完成计算,不需要复杂的子查询或者关联操作,写法非常直接。
可直接运行的SQL代码
把代码里的your_source_table替换成你自己实际的表名即可:
SELECT AVG(data) AS `AVG(data)`, groupA, groupB FROM your_source_table GROUP BY groupA, groupB;
关键说明
- 分组规则:
GROUP BY后拼接多个字段时,MySQL会将所有指定字段取值完全一致的行划分为同一分组,完全匹配你需要按唯一(groupA, groupB)值对聚合的需求。 - 计算逻辑:
AVG(data)会自动跳过data列为NULL的行,计算分组内所有非NULL值的算术平均值。如果需要固定结果的小数位数,可以嵌套ROUND函数,比如保留2位小数的写法为ROUND(AVG(data), 2) ASAVG(data)``。 - 兼容性:上述写法完全符合MySQL 5.7+版本默认开启的
ONLY_FULL_GROUP_BY语法规范,不会抛出非聚合字段不在GROUP BY子句中的报错。
效果验证示例
如果你的源表有如下测试数据:
| data | groupA | groupB |
|---|---|---|
| 12 | 1 | x |
| 18 | 1 | x |
| 24 | 1 | y |
| 36 | 2 | y |
运行SQL后返回的结果和你要求的表结构完全一致:
| AVG(data) | groupA | groupB |
|---|---|---|
| 15 | 1 | x |
| 24 | 1 | y |
| 36 | 2 | y |
内容的提问来源于stack exchange,提问作者user1886681
相关产品推荐
相关产品推荐

