开启only_full_group_by时如何按日期字段的月份对表记录分组
问题原因
你的SQL报错不是only_full_group_by不允许按月分组汇总,问题出在ORDER BY子句引用了未参与分组也未被聚合的原始date字段,不符合only_full_group_by的校验规则。
正确实现写法
最简写法(使用别名分组排序)
SELECT SUM(`payment`) AS total, DATE_FORMAT(`date`, '%Y-%m') AS month FROM `my_table` GROUP BY `month` ORDER BY `month` DESC
这里GROUP BY直接使用SELECT中定义的month别名,ORDER BY同样使用分组后的month字段,完全符合only_full_group_by的要求,运行后就能得到你预期的按月汇总结果。
不使用别名的等价写法
SELECT SUM(`payment`) AS total, DATE_FORMAT(`date`, '%Y-%m') AS month FROM `my_table` GROUP BY DATE_FORMAT(`date`, '%Y-%m') ORDER BY DATE_FORMAT(`date`, '%Y-%m') DESC
按年、月函数分组的正确写法
你之前尝试GROUP BY MONTH(date), YEAR(date)报错同样是因为ORDER BY用了原始date字段,调整后也可以正常运行:
SELECT SUM(`payment`) AS total, CONCAT(YEAR(`date`), '-', LPAD(MONTH(`date`), 2, '0')) AS month FROM `my_table` GROUP BY YEAR(`date`), MONTH(`date`) ORDER BY YEAR(`date`) DESC, MONTH(`date`) DESC
内容的提问来源于stack exchange,提问作者Nunoki
相关产品推荐
相关产品推荐

