# MySQL 中的 any_value () 函数 - 解决问题 - 工作 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎？为之，则难者亦易矣
Keywords: mysql

#### # 问题

业务要求：查询所有省份：

#### # 方法

1. distinct 排除重复

    SELECT

    	DISTINCT(province_code),

    	province_name

    FROM

    	t_mip_base_area

2. group by 根据身份编码分组

    SELECT

    	province_code,

    	any_value(province_name)

    FROM t_mip_base_area

    GROUP BY province_code

###### # 若这样写

    SELECT

        province_code,

        province_name

    FROM t_mip_base_area

    GROUP BY province_code

则会报错

#### # 总结：

1. MySQL5.7 之后，sql_mode 中 ONLY_FULL_GROUP_BY 模式默认设置为打开状态。

2. ONLY_FULL_GROUP_BY 的语义就是确定 select target list 中的所有列的值都是明确语义，简单的说来，在此模式下，target list 中的值要么是来自于聚合函数（sum、avg、max 等）的结果，要么是来自于 group by list 中的表达式的值

3. MySQL 提供了 any_value () 函数来抑制 ONLY_FULL_GROUP_BY 值被拒绝

4. any_value () 会选择被分到同一组的数据里第一条数据的指定列值作为返回数据

mysql