1.报错截图如下:
2.报错原因:
- mysql5.7以后将 sql_model 的 ONLY_FULL_GROUP_BY 模式设置为打开状态,这样一来很多以前的聚合的语句就会报上面的错误
- 对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 里面出现,那么将认为这个 SQL 语句是不合法的,因为列不在 GROUP BY 语句中。
3.解决方法:
- 可以把 select 中查询的属性(除聚合函数所需要的参数外),全部放入any_value函数中,在 Sequelize 使用如下:
// eggjs service
/* 说明:先关联外表在分组聚合查询 */
import { Service } from 'egg';
import Sequelize from 'sequelize';
const Op = Sequelize.Op;
export default class TotalService extends Service {
public async findEchartsList() {
const { ctx } = this;
return await ctx.model.GameDiyInfo.findAll({
order: [['id', 'DESC']],
include: [
{
model: ctx.model.SaveData,
as: 'savePage',
attributes: ['gid', 'type']
}
],
attributes: ['id', [Sequelize.fn('COUNT', Sequelize.col('game_diy_info.id')), 'count']],
plain: false,
/* --- start --- */
group: ['game_diy_info.id', 'savePage.gid', 'savePage.type'], // 分组 必填
/* --- end --- */
raw: true
});
}
}
- 可以关闭这个模式
在 Navicat 里面使用,点击新建查询 然后输入 select @@global.sql_mode;
然后再输入 set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 就设置成功了