关于mysql5.7 [Err] 1055 group by

来源:互联网 发布:acfunfix.js 编辑:程序博客网 时间:2024/04/19 03:22
我们在用mysql时,有时候我们用group by 分组时在不同版本mysql下运行会报这样的错:[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hyeb.p.CHARGE_DATE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
例如我的查询sql是:
SELECT p.charge_date, r.busi_id FROM pay_charge_record p, busi_order_rel r WHERE p.PAY_TYPE = 'S' AND p.ORDER_FLAG >= 10 AND p.ORDER_NO = r.order_no AND p.CREATE_OPER = 101 GROUP BY busi_id order by charge_date descWHERE p.PAY_TYPE = 'S' AND p.ORDER_FLAG >= 10 AND p.ORDER_NO = r.order_no AND p.CREATE_OPER = 101 GROUP BY r.busi_id order by charge_date desc在mysql5.7版本下报的错就如上。我当时上网搜索了一些资料,说是mysql启用了 only_full_group_by模式,让 GROUP BY的行为与 SQL92 标准一致 ,
因此会报这样的错误。
因此可以用:
SELECT p.charge_date, r.busi_id FROM pay_charge_record p,busi_order_rel r WHERE p.PAY_TYPE = 'S' AND p.ORDER_FLAG >= 10 AND p.ORDER_NO = r.order_no AND p.CREATE_OPER = 101 GROUP BY r.busi_id, p.CHARGE_DATE order by charge_date desc

这样写来避免报错,但是查出的结果却不是我们想要的。

所以又上网搜了一些方法,然后参考mysql5.7官方文档可以用 any_value()这个函数来解决问题,SQL如下:

SELECT any_value(p.charge_date) as CHARGE_DATE ,r.busi_id FROM pay_charge_record p,busi_order_rel r WHERE p.PAY_TYPE = 'S' AND p.ORDER_FLAG >= 10 AND p.ORDER_NO = r.order_no AND p.CREATE_OPER = 101 GROUP BY busi_id order by charge_date desc

用了any_value实现了自己想要的结果。但是该函数在mysql5.7版本以下不能使用,当然5.7版本以下也不会报上面的错误。

有时候我们出现上面的错误是因为SQL语句不符合规范,希望该文章对大家有帮助。

原创粉丝点击