SQL 错误 [1055] [42000]mysql group by重复数据筛选的用法
文章目录
前言
提示:SQL 错误 [1055] [42000]: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'plt_om_test.t.ticket_type_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
在工作过程中遇到的问题,上述报错是因为在 MySQL 5.7 版本中,默认开启了 only_full_group_by 模式,使得group by的用法需要涵盖全部非同字段,当我们只需要一条重复数据的其中一条时显得没那么好用
提示:以下是本篇文章正文内容,下面案例可供参考
一、group by基础用法
select
t.type_code_fullname,
t.name
from
kf_terminal_tickettype_sw t
group by
t.type_code_fullname,
t.name
有可能会出现重复数据,如下图
二、group by去重复的用法
1.关闭sql_mode “ONLY_FULL_GROUP_BY”
此方法数据库重启后会失效:
- 查询sql_mode
select @@GLOBAL.sql_mode;
查询结果会包含“ONLY_FULL_GROUP_BY”,我们只需执行下述命令,把“ONLY_FULL_GROUP_BY”删除替换原来配置,即可临时更新配置
set sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
关闭“ONLY_FULL_GROUP_BY”配置后即可使用非全匹配group by,有重复数据会默认取列表第一个
select type_code_fullname,name from kf_terminal_tickettype_sw group by type_code_fullname
2.视条件使用MAX(),MIN(),SUM(),ANT_VALUE() 这种聚合函数
代码如下(示例):
select type_code_fullname,min(name) from kf_terminal_tickettype_sw group by type_code_fullname
这里补充介绍一下ANT_VALUE() 用法
//ANT_VALUE() :
select type_code_fullname,any_value(name) from kf_terminal_tickettype_sw group by type_code_fullname
ANT_VALUE() 会默认取列表里面的筛选出的第一项数据
总结
以上就是今天要讲的内容,本文仅仅简单介绍了gruop by的使用和使用过程中遇到的一个问题处理,希望遇到问题的时候看到这篇文档能帮助到你们。