mysql分组查询出现下面错误

1055 - Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'pfbuild.building_management.entrytime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现这个问题是因为mysql为了增强查询效率而必须强制限制查询字段,除非有聚合函数的字段可以一起带出查询,否则就会报该错误。

	SELECT
		COUNT( 1 ) total, --聚合函数引用的字段
		CONCAT ( building, '-', floor ) fl, -- 分组字段
	FROM
		building_management 
	WHERE
		project_id = 124 
	GROUP BY
		fl -- 如果上面出现表中字段且分组这里没有加上上面查询出来的字段那么就会出现sql_mode=only_full_group_by这个错误

在这里插入图片描述
那么怎么解决这个问题了,我们可以用ANY_VALUE这个聚合函数来包裹我们要查的字段且又不需要写到分组函数的后面
如:

	SELECT
		ANY_VALUE(COUNT( 1 )) total,
		-- 如 ANY_VALUE(COUNT( 1 ) total) 这会就会报错
		 -- 聚合函数包裹字段  特别注意这里的别名不能写在ANY_VALUE()函数里面,不然会出现新问题如下图 
		CONCAT ( building, '-', floor ) fl,  分组字段
		any_value(type) type, -- 聚合函数包裹字段
		any_value(entrytime) entrytime -- 聚合函数包裹字段
	FROM
		building_management 
	WHERE
		project_id = 124 
	GROUP BY
		fl -- 这里就不需要写上面查询出来的字段,只需写要分组的字段,也不会报错
	ORDER BY entrytime desc

在这里插入图片描述

如出现问题需要仔细看上面的sql定能帮你解决,并不需要像很多人说的要改mysql配置文件
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐