# 问题
业务要求:查询所有省份:
# 方法
- distinct 排除重复
SELECT | |
DISTINCT(province_code), | |
province_name | |
FROM | |
t_mip_base_area |
- 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 |
则会报错
# 总结:
MySQL5.7 之后,sql_mode 中 ONLY_FULL_GROUP_BY 模式默认设置为打开状态。
ONLY_FULL_GROUP_BY 的语义就是确定 select target list 中的所有列的值都是明确语义,简单的说来,在此模式下,target list 中的值要么是来自于聚合函数(sum、avg、max 等)的结果,要么是来自于 group by list 中的表达式的值
MySQL 提供了 any_value () 函数来抑制 ONLY_FULL_GROUP_BY 值被拒绝
any_value () 会选择被分到同一组的数据里第一条数据的指定列值作为返回数据