侧边栏壁纸
  • 累计撰写 88 篇文章
  • 累计创建 41 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

MySQL/MariaDB 查询某个/多个字段重复数据

勤为径苦作舟
2023-08-24 / 0 评论 / 0 点赞 / 85 阅读 / 0 字

创建测试表和数据

# 创建表
create table if not exists t_duplicate (
  name varchar(255) not null,
  age int not null
);

# 插入测试数据
insert into t_duplicate(name, age) values('a', 1);
insert into t_duplicate(name, age) values('a', 2);

查询单个字段重复

使用 count() 函数、group by 分组和 having 分组后筛选

select name, count(*) count
from t_duplicate
group by name
having count > 1;
  • group by name:根据name字段分组。
  • count(*):计算每个分组的记录数量。
  • having count > 1:在分组后筛选分组的记录数 > 1 的分组。

查询结果:

namecount
a2

使用子查询和 in

select *
from t_duplicate
where name in (
  select name
  from t_duplicate
  group by name
  having count(*) > 1
)
  • 子查询:根据name分组,筛选分组的记录数 > 1 的分组,即查询重复的name
  • 外部查询:用in筛选name重复的记录。

查询结果:

nameage
a1
a2

使用窗口函数 over 和 partition by 分区

select `name`, count
from (
  select name, (count(*) over (partition by name)) as count
  from t_duplicate
) t
where count > 1
  • partition by name:按照name字段分区,相同的name值在一个分区。
  • count(*) over:计算每个分区的记录数。
  • count > 1:筛选分区记录数 > 1 的数据。

查询结果:

namecount
a2
a2

查询多个字段重复

……

0

评论区