SQL 错误 [1055] [42000]mysql group by重复数据筛选的用法

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”

此方法数据库重启后会失效:

  1. 查询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的使用和使用过程中遇到的一个问题处理,希望遇到问题的时候看到这篇文档能帮助到你们。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值