MySQL 8.0中LAST_DAY函数使用异常求助:按客户月终值查询问题
问题排查与解决
你的SQL写法存在逻辑错误,导致结果不符合预期:
核心问题
你仅按customer_id和LAST_DAY(txn_date)分组,但未对txn_type和txn_amount做聚合处理。在MySQL 8.0默认启用的ONLY_FULL_GROUP_BY模式下,这种写法会返回分组内随机的非聚合字段值,完全无法实现你想要的每月交易汇总需求。从你的预期结果来看,实际需求是每个客户每月每种交易类型的金额总和。
修正代码
SELECT customer_id, LAST_DAY(txn_date) AS months, txn_type, SUM(txn_amount) AS txn_amount FROM data_bank.customer_transactions GROUP BY customer_id, months, txn_type ORDER BY customer_id, months;
效果验证
- 针对customer_id=1的1月数据:两条
deposit记录的金额156+156=312,与预期结果一致; - 3月的两条
purchase记录564+100=664,完全匹配预期; - 若你不需要区分交易类型,只想获取每月总金额,可以移除GROUP BY中的
txn_type,同时去掉SELECT里的txn_type字段(或用GROUP_CONCAT(txn_type)合并类型)。
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

