MySQL实现透视表行转列 按日期分组统计各账户金额及平均值
MySQL 按日期行转列+计算日均值的最优查询方案
首先假设你的表名为account_records,可替换为实际表名。
最优查询语句
该方案使用条件聚合实现行转列,仅需单次扫描表,性能远高于多表关联、子查询等实现方式,兼容所有MySQL版本:
SELECT `date`, SUM(CASE WHEN account = 1 THEN amount ELSE 0 END) AS account1, SUM(CASE WHEN account = 2 THEN amount ELSE 0 END) AS account2, SUM(CASE WHEN account = 3 THEN amount ELSE 0 END) AS account3, AVG(amount) AS average_amount FROM account_records GROUP BY `date` ORDER BY `date`;
注:如果同一个日期同一个账户可能存在多条记录,用
SUM可直接做金额汇总;如果确定单条记录,用MAX/MIN效果完全一致。
样例输出
针对你提供的测试数据,查询结果如下:
| date | account1 | account2 | account3 | average_amount |
|---|---|---|---|---|
| 2021-01 | 3000 | 2100 | 1800 | 2300.0000 |
| 2021-02 | 3500 | 1500 | 2500 | 2500.0000 |
方案说明
- 不需要使用MySQL 8.0+的窗口函数或PIVOT语法,低版本也可正常运行
- 仅需一次表扫描即可完成所有计算,是该场景下性能最高的实现
- 语法简洁易维护,调整账户数量只需要新增对应CASE WHEN分支即可
内容的提问来源于stack exchange,提问作者irwanian
相关产品推荐
相关产品推荐

