关于mysql5.7 [Err] 1055 group by

我们在用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 desc 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 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语句不符合规范,希望该文章对大家有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值