使用 GROUP BY 报1055错误
情况:
db.session.query(QJScenicHeartbeat.userId, QJScenicHeartbeat.longitude, QJScenicHeartbeat.latitude, QJScenicHeartbeat.time, QJScenicUser.nickname, QJScenicUser.avatar).select_from( QJScenicHeartbeat, QJScenicUser).filter( QJScenicHeartbeat.areaId == areaId, QJScenicHeartbeat.time >= nowTime - area.timeout, QJScenicHeartbeat.time <= nowTime, QJScenicHeartbeat.userId == QJScenicUser.uuid).group_by( QJScenicHeartbeat.userId).order_by(desc(QJScenicHeartbeat.time)).all()]
代码解释:
查了一些字段,从俩表里,按照userid分组,排序,然后报错
only_full_group_by说明:
only_full_group_by :默认规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN)
解决办法:
5.7 mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 8.0 mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
这两个命令,去掉 sql_mode 的 ONLY_FULL_GROUP_BY