mysql中对数据的去重
最近面试有家公司问了个mysql的数据去重,自己对于mysql一般多用于增删改查,所以私下来尝试了mysql数据的去重总结
DISTINCT
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。如下:
表student
SELECT DISTINCT s_name FROM student;
SELECT COUNT(DISTINCT s_name) AS scounts FROM student;
GROUP BY
group by 字句把一个表按照某一指定列或者一些列上的值相等的原则分组。然后再对每组数据进行规定的操作
SELECT * FROM student GROUP BY s_name;
如果出现this is incompatible with sql_mode=only_full_group_by
一、原理层面
这个错误发生在mysql 5.7 版本及以上版本会出现的问题:
mysql 5.7版本默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。
二、sql层面
在sql执行时,出现该原因:
简单来说就是:输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是
group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list
和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。
解决方案:
先查看sql_mode
select @@GLOBAL.sql_mode;
执行:
set@@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
或修改mysql的配置文件
windows中为my.ini
linux为my.cnf
具体操作请自行搜索
删除重复数据保留其中一条
我们首先执行
DELETE FROM student WHERE s_name IN (SELECT s_name FROM student GROUP BY s_name HAVING COUNT() >1) AND s_name NOT IN (SELECT MIN(s_id) FROM student GROUP BY s_name HAVING COUNT() >1);
发现出现了错误:
原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作
解决办法:把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。
DELETE FROM student WHERE s_id NOT IN (SELECT dt.mins_id FROM (SELECT MIN(s_id) AS mins_id FROM student GROUP BY s_name) dt);
已经将重复的完成了删除
mysql中对数据的去重相关推荐
- android json mysql_Android通过json向MySQL中读写数据的方法详解【写入篇】
本文实例讲述了Android通过json向MySQL中写入数据的方法.,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Jav ...
- 利用Ajax实现数据的同步传输,从mysql中提取数据,通过echarts可视化
如何将mysql数据库中的方式通过echarts可视化呢,以下面这个简单的例子向大家进行演示: 步骤一:mysql的创表和插入数据,当然这些数据也可以是你通过爬虫抓取的. 步骤二: 创 ...
- python向数据库写入数据_如何用Python向Mysql中插入数据
我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...
- android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】
本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...
- PHP如何批量更新MYSQL中的数据
最近项目需要用到批量更新数据库里的数据,在网上找了一下这方面的例子,觉得这个还不错,分享给大家. 在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码 $sql = &qu ...
- 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)
在之前转载的一腾讯高级工程师<一文彻底了解Logstash>对logstach有这详细的介绍,这里我只说明一下,将mysql中的数据使用logstash导入到es中,如何操作,具体步骤见下 ...
- python 数据导入mysql_用python批量向数据库(MySQL)中导入数据
用python批量向数据库(MySQL)中导入数据 现有数十万条数据,如下的经过打乱处理过的数据进行导入 数据库内部的表格的数据格式如下与下面的表格结构相同Current database: pyth ...
- mysql中的dump,从mysql中dump数据到本地
方法一:使用mysqldump命令,如: mysqldump -h10.90.6.237 -uf_insplat2car_r -P3306 -pxxxxxxxxx nbmp tb_tag_log -- ...
- MySQL_(Java)分页查询MySQL中的数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL_(Java)使用preparestatement ...
最新文章
- forkjoin rxjs_如何通过吃披萨来理解RxJS运算符:zip,forkJoin和Combine
- 8500WN流畅高速上网高端卡 12核心不锁倍频
- 解析jsonarra_使用JSONReader或JSONObject / JSONArray解析JSON数据
- Git命令,合并分支到master,并提交远程仓库,将本地分支推送到远程仓库
- Celex Update CodeForces - 1358C(打表找规律)
- 安卓设置Activity切换动画无效的问题
- 文件下载时,文件名乱码问题
- oracle schema_了解Oracle备份恢复的知识
- MapXtreme 使用技巧10例
- c语言调整图片分辨率,如何不改变图片分辨率,并且缩小图片质量-电脑自学网...
- 变量可以存储在堆中,栈中,方法区中。哪里都可以啊。对象只能存储在堆中...
- javascrip执行字符串里面的函数
- Prometheus 监控linux服务器
- 网上图书商城Web页面
- 产品认证之IP防护等级
- 每日作业-品优购详情页
- 如何将PDF转化成Word格式
- 苹果的胜利:Adobe宣布Flash Media服务支持iOS设备运行Flash
- androbench测存储速率
- 单片机开发,口袋秤单片机芯片的开发流程
热门文章
- python dataframe是什么_什么是Pandas的DataFrame?
- 打开ps提示计算机中丢失,ps打开出现dll文件丢失怎么解决
- nnunet入门之一 (CT图像分割)
- Android studio修改标题菜单栏增加功能图标(navigation bar toolbar)
- php dsa 签名,openssl使用DSA算法生成签名实例详解_PHP教程
- 多线程高并发,spring整合kafka消费
- Md5工具包加密之MD5Util
- Vscode好用的快捷键:批量文字修改快捷键选中相同内容快捷键
- 張潮《幽夢影》:「讀史宜夏」
- Python——from collections import namedtuple