故梦博客 - mysql
type: channel
link: https://blog.gmya.net/tag/mysql/
items: MySQL 数据去重
items: MySQL数据库删除重复记录只保留其中一条
items: MySQL远程连接之%权限

MySQL 数据去重
type: item
date: 2023-04-08T23:21:47+08:00
description: 在数据处理和分析中，我们经常需要对数据进行去重操作，以便更好地进行数据挖掘和分析。在 MySQL 中，可以使用多种方法对数据进行去重操作。本文将介绍一些常见的去重方法一、使用 DISTINCT 关键字在 SELECT 语句中使用 DISTINCT 关键字可以去除查询结果中的重复行。例如，下面的语句将返回一个包含不同城市名称的结果集：SELECT DISTINCT city FROM customers;这个语句将在 customers 表中选择所有不同的城市名称，并返回一个结果集。二、使用 GROUP BY 子句使用 GROUP BY 子句可以将结果集按照指定的列进行分组，并计算每组的聚合值。在使用 GROUP BY 子句时，可以使用 COUNT 函数计算每组的行数，从而得出去重后的结果。例如，下面的语句将返回一个包含不同城市名称和每个城市顾客数量的结果集：SELECT city, COUNT(*) as customer_count FROM customers GROUP BY city;这个语句将在 customers 表中选择所有不同的城市名称，并使用 COUNT(*) 函数计算每个城市的顾客数量。使用 GROUP BY 子句对结果集按城市名称进行分组。三、使用子查询使用子查询可以将重复的数据筛选出来，并从表中删除。例如，下面的语句将删除 customers 表中重复的 email 地址：DELETE FROM customers WHERE id NOT IN ( SELECT MIN(id) FROM customers GROUP BY email );这个语句使用子查询找到 email 地址重复的记录，然后保留每个 email 地址的第一条记录，并删除其余的记录。四、使用临时表使用临时表可以将重复的数据插入到临时表中，然后从原表中删除这些数据。例如，下面的语句将将 customers 表中重复的 email 地址插入到临时表中，并从 customers 表中删除这些数据：CREATE TEMPORARY TABLE tmp_email_duplicates AS SELECT email FROM customers GROUP BY email HAVING COUNT(*) > 1; DELETE FROM customers WHERE email IN ( SELECT email FROM tmp_email_duplicates );这个语句先创建一个临时表 tmp_email_duplicates，将 email 地址重复的记录插入到临时表中，然后使用子查询删除原表中 email 地址在临时表中存在的记录。五、使用窗口函数窗口函数是 MySQL 新版本中引入的一种分析函数，它可以在结果集中对分组后的数据进行计算和排序。使用窗口函数可以方便地对数据进行去重操作。例如，下面的语句将返回一个包含不同城市名称和每个城市顾客数量的结果集：SELECT city, COUNT(*) OVER (PARTITION BY city) as customer_count FROM customers;这个语句将在 customers 表中选择所有城市名称，并使用 COUNT(*) OVER (PARTITION BY city) 函数计算每个城市的顾客数量。使用 PARTITION BY 子句对结果集按城市名称进行分组。总结MySQL 提供了多种方法对数据进行去重操作，包括使用 DISTINCT 关键字、GROUP BY 子句、子查询、临时表和窗口函数等。根据实际情况选择合适的方法可以更加高效地进行数据处理和分析。在进行数据去重操作时，建议先备份数据表，以免误操作导致数据丢失。以上就是 MySQL 数据去重的一些常见方法和对应的 SQL 示例，希望对你有所帮助。

MySQL数据库删除重复记录只保留其中一条
type: item
date: 2020-08-31T20:04:00+08:00
description: 查出重复的typeSELECT type FROM table GROUP BY type HAVING count(type) > 1; 查出重复的type数据中最小的idSELECT min(id) FROM table GROUP BY type HAVING count(type) > 1; 查出重复的type数据中非最小的id(需要删除的)SELECT id FROM table WHERE type in( SELECT type FROM table GROUP BY type HAVING count(type) > 1) AND id not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1); 在Mysql中是不能删除查询出来的记录，而是要通过一张临时表来解决SELECT id from ( SELECT id FROM table WHERE type in( SELECT type FROM table GROUP BY type HAVING count(type) > 1) AND id not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1) ) as t; 删除type重复的数据(只保留一条，保留最小id的)DELETE FROM table WHERE id IN ( SELECT id from ( SELECT id FROM table WHERE type in( SELECT type FROM table GROUP BY type HAVING count(type) > 1) AND id not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1) ) as t );

MySQL远程连接之%权限
type: item
date: 2020-08-31T19:51:00+08:00
description: 我们在远程电脑管理数据库时经常遇到这样的问题那么本文章给大家来解决一下这个问题测试服务器使用CentOS7.5-MySQL5.5需要先开启MySQL端口，否则设置了也无法连接如果使用iptables防火墙的可以以下操作开启3306vi /etc/sysconfig/iptables #编辑防火墙配置文件最底下添加一行-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT:wq! #保存退出然后需要重启以一下防火墙systemctl restart iptables.service #重启防火墙使配置生效systemctl enable iptables.service #设置防火墙开机启动操作非常简单，就5步骤，如下：先连接到MySQLmysql -uroot -p 或 /usr/local/mysql/bin/mysql -u root -p随后出现Enter password:时输入您MySQL的root密码出现以下图片内容就代表MySQL连接成功了进入mysql表use mysql; 查看用户表SELECT `Host`,`User` FROM user; 更新用户root用户权限UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;[scode type="yellow"]%可以修改成指定IP[/scode]强制刷新权限flush privileges; 完成以上步骤即可远程连接数据库了