# 问题

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

# 方法

  1. distinct 排除重复

    1
    2
    3
    4
    5
    SELECT
    DISTINCT(province_code),
    province_name
    FROM
    t_mip_base_area

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

    1
    2
    3
    4
    5
    SELECT 
    province_code,
    any_value(province_name)
    FROM t_mip_base_area
    GROUP BY province_code

# 若这样写

1
2
3
4
5
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 () 会选择被分到同一组的数据里第一条数据的指定列值作为返回数据

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝