MySQL 5.7查询如何获取分组结果的销售额总计与平均值
MySQL 5.7 实现带总计、平均值的分组统计方案
核心逻辑
MySQL 5.7 不支持窗口函数、CTE 等高阶语法,要实现「按日期分组的日销明细+全量总计+日销平均值」的结果,直接通过UNION ALL拼接多段结果集即可,额外加排序标记保证结果展示顺序符合预期。
最终查询语句
SELECT ord_date, product_sales FROM ( -- 每日销售明细 SELECT ord_date, SUM(product_sales) AS product_sales, 1 AS sort_order FROM salestable GROUP BY ord_date UNION ALL -- 销售额总计行 SELECT '总计' AS ord_date, SUM(product_sales) AS product_sales, 2 AS sort_order FROM salestable UNION ALL -- 日销平均值行 SELECT '平均值' AS ord_date, ROUND(AVG(daily_sales), 2) AS product_sales, 3 AS sort_order FROM ( -- 先统计每日销售额,再基于日销数据算平均值,避免统计口径错误 SELECT SUM(product_sales) AS daily_sales FROM salestable GROUP BY ord_date ) daily_stat ) final_result ORDER BY sort_order, ord_date;
注意事项
- 内层增加
sort_order字段是为了固定结果顺序:优先展示按日期排序的每日明细,之后展示总计行,最后展示平均值行,避免统计行穿插在明细中 - 平均值的计算口径是「每日销售额的平均值」,而非单条订单记录的销售额平均值,和分组统计的业务逻辑一致,
ROUND函数的保留小数位数可根据实际业务需求调整 - 所有语法完全兼容MySQL 5.7版本,无需额外配置即可运行
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

