(pymysql.err.OperationalError) (1055, "Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column

使用 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

参考自:https://blog.csdn.net/fansili/article/details/78664267

原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/14463505.html