MySQL - 如何根据单列查找重复行?

标签 mysql sql group-by aggregate-functions window-functions

  1. 我试图查找表中某一列重复的所有行。并通过每行具有的唯一 id 列来标识它们。

  2. 我想删除它们并只保留一份(行),哪一份并不重要。 (如果可以通过SQL完成,则优先,如果注明,我会编码它..)

(我正在使用工作台)

我尝试过这个:

SELECT 
  *
FROM
  table_name
GROUP BY `field_name`
HAVING COUNT(*) > 1;

失败了。
我的第一个问题是 sql_mode=only_full_group_by,因此我通过向查询添加字段名称来修复它。它起作用了..好吧,有点。从现在开始,我只看到了没有 id 列的聚合结果。

SELECT 
    field_name
FROM
    table_name
GROUP BY `field_name`
HAVING COUNT(*) > 1;

所以,我来了.. 我该怎么做?

最佳答案

如果我没听错的话,你可以使用窗口函数:

select *
from (
    select t.*, count(*) over(partition by field_name) cnt
    from mytable t
) t
where cnt > 1

对于每一行,子查询都会进行窗口计数,计算有多少行共享相同的 field_name 值。然后,外部查询会筛选 field_name 不唯一的行。

请注意,这需要 MySQL 8.0。在早期版本中,替代方案使用 exists:

select *
from mytable t
where exists (
    select 1 
    from mytable t1 
    where t1.field_value = t.field_value and t1.id != t.id
)

关于MySQL - 如何根据单列查找重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75675976/

相关文章:

mysql - phpMyAdmin 安装程序无法识别自己的密码

Java + Postgresql : How to store Parent and List of all children in a HashMap<String, ArrayList <字符串>>

Python pandas 通过对现有列进行分组来创建额外的数据框列

r - data.table:一步一步进行分组,总和,命名新列和切片列

mysql - sql select with count 在里面

python - Pandas 的数量超过群体

php - 自动安装 WordPress?

php 根据 mysql 中的列重命名目录中的文件

php - 将 mysql 查询的结果插入现有表

mysql - 这个 MySQL 查询有什么问题——数据库不接受?