1055 - Expression #4 of SELECT list is not in GROUP BY clause and contai sql_mode=only_full_group_by
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 i.
·
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配置文件
更多推荐
已为社区贡献1条内容
所有评论(0)