分组过后的属性查询报错
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘wdf_bpm.wdf_monitor_type_item.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
错误原因
原因是mySql的8.几的某个版本 only_full_group_by设置又更改,所以GROUP BY要符合only_full_group_by的设置。
解决方法
在要查询的每个属性用 any_value()进行包裹
// 这是错误的查询
SELECT id,type_id FROM wdf_monitor_type_item GROUP BY type_id
// 这是修改后的查询
SELECT any_value(id),any_value(type_id) FROM wdf_monitor_type_item GROUP BY type_id
any_value() 函数的解析
1,any_value()函数在SQL中的作用主要是用于在分组查询中为每个组选择一个值;
2,其工作原理是,当在分组查询中,并不关心具体选择哪个值,而只需要为每个组选择一个值时,可以使用any_value()函数。它返回的值是随机的,不保证总是返回相同的值,因此被称为“非确定性”的。如果组内所有的值都是NULL,any_value()函数会返回NULL。此外,它也不保证返回值的唯一性,有可能返回重复的值2。
3,需要注意的是,any_value()函数并非标准SQL的一部分,是MySQL的扩展功能。因此,在使用时需要考虑数据库系统的兼容性。这个函数是5.7版本开始引入到MySQL中的。