GROUP BY 当启用 SQL 模式时,此函数对于查询 很有用ONLY_FULL_GROUP_BY,例如 MySQL 因 MySQL 无法确定的原因而拒绝您知道有效的查询的情况。函数返回值和类型与其参数的返回值和类型相同,但对于 SQLONLY_FULL_GROUP_BY 模式不检查函数结果。
语法
ANY_VALUE(<字段名>)
语法说明:<>是中文解释。
例如,如果name是非索引列,则以下查询将失败并 ONLY_FULL_GROUP_BY启用:
mysql> SELECT name, address, MAX(age) FROM t GROUP BY name; ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mydb.t.address' which is not functionally dependent on columns in GROUP BY clause; thisis incompatible with sql_mode=only_full_group_by
![]() | mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,会报错误。 |
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
MySQL有any_value(field)函数,它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝。
这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。
any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。