创建测试表和数据
# 创建表
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 的分组。
查询结果:
name | count |
---|---|
a | 2 |
使用子查询和 in 函数
select *
from t_duplicate
where name in (
select name
from t_duplicate
group by name
having count(*) > 1
)
- 子查询:根据
name
分组,筛选分组的记录数 > 1 的分组,即查询重复的name
。 - 外部查询:用
in
筛选name
重复的记录。
查询结果:
name | age |
---|---|
a | 1 |
a | 2 |
使用窗口函数 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 的数据。
查询结果:文章来源:https://www.toymoban.com/news/detail-706289.html
name | count |
---|---|
a | 2 |
a | 2 |
查询多个字段重复
……文章来源地址https://www.toymoban.com/news/detail-706289.html
到了这里,关于MySQL/MariaDB 查询某个 / 多个字段重复数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!