MySQL统计2020年各月referrer数量时报Error 1055错误如何解决?
MySQL Error 1055报错原因说明
触发该报错的核心原因是当前MySQL环境开启了sql_mode=only_full_group_by校验规则,该规则的要求是:SQL经过GROUP BY分组后,所有在SELECT、ORDER BY、HAVING子句中出现的非聚合字段/表达式,必须已经包含在GROUP BY子句中,否则就会抛出1055错误。
你虽然已经对齐了SELECT和GROUP BY子句的内容,但忽略了ORDER BY子句同样需要遵守上述规则,当前SQL的问题具体如下:
- 你GROUP BY的分组维度是
MONTH(day)(按月份聚合)和referrer,聚合后每一行是「2020年某月份+某来源」的统计结果,原始表的day字段是具体日期,不在GROUP BY的维度中,也没有用MAX、MIN等聚合函数包裹 - ORDER BY子句直接使用了原始
day字段排序,同一个分组下可能存在多个不同的day值,MySQL无法确定排序的依据,因此触发报错。
修正方案
将ORDER BY子句中的day替换为分组用的MONTH(day)即可,修正后的语句如下:
SELECT MONTH(day) MONTH, referrer, COUNT(referrer) AS cumulative_pageviews FROM weblogs WHERE YEAR(day) >= '2020' GROUP BY MONTH(day), referrer ORDER BY MONTH(day), referrer;
内容的提问来源于stack exchange,提问作者SQL N3rd
相关产品推荐
相关产品推荐

