示例 accountinfo 表数据如下:
场景一 单个字段重复数据查找 & 去重
我们要把上面这个表中 单个字段 account字段相同的数据找出来。
思路 分三步 简述:
第一步
要找出重复数据,我们首先想到的就是,既然是重复,那么 数量就是大于 1 就算是重复。 那就是 count 函数 。
因为我们要排查的是 单个 字段account ,那么就是需要按照 account 字段 维度 去分组。 那就是 group by 函数。
那么我们第一步写出来的mysql 语句是:
SELECT account ,COUNT(account) as count FROM accountinfo GROUP BY account;
查询结果如下:
第二步
没错,如我们所想,count大于1的即是 account为 A 和 B 的数据。
那么我们稍作筛选,只把count大于1的数据的account 找出来。
第二步,利用having 拼接筛选条件,写出来的mysql 语句是:
SELECT account FROM accountinfo GROUP BY account HAVING COUNT(account) > 1;
查询结果如下:
第三步
重复的account数据 A B 都找出来了,接下来我们只需要把account为A 和 B 的其他数据都一起查询出来。
那就是利用第二步查出来的数据做为子查询条件,使用 IN 函数。
第三步写出来的mysql 语句是:
SELECT * FROM accountinfo WHERE account IN ( SELECT account FROM accountinfo GROUP BY account HAVING COUNT(account) > 1 );
查询结果如下: