美文网首页
mysql 重复数据的处理

mysql 重复数据的处理

作者: Zzz_CH | 来源:发表于2019-06-19 15:19 被阅读0次

    假设有一张表如下,含有部分重复数据,这些重复数据除了 id 不同,其他数据都相同。

    id student_id name course_id course_name score
    1 2005001 张三 1 数学 69
    2 2005002 李四 1 数学 89
    3 2005001 张三 1 数学 69
    CREATE TABLE `test` (
      `id`          INT UNSIGNED NOT NULL AUTO_INCREMENT,
      `student_id`  INT UNSIGNED NOT NULL,
      `name`        VARCHAR(20)  NOT NULL,
      `course_id`   INT UNSIGNED NOT NULL,
      `course_name` VARCHAR(20)  NOT NULL,
      `score`       INT UNSIGNED NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE = InnoDB;
    
    INSERT INTO `test` (`student_id`, `name`, `course_id`, `course_name`, `score`)
    VALUES (2005001, '张三', 1, '数学', 69),
           (2005002, '李四', 1, '数学', 89),
           (2005001, '张三', 1, '数学', 69);
    

    1. 过滤重复数据

    使用 group by 进行查找就可以过滤重复数据

    SELECT `student_id`, `name`, `course_id`, `course_name`, `score` FROM `test`
      GROUP BY `student_id`, `name`, `course_id`, `course_name`, `score`;
    

    2. 统计重复数据

    SELECT count(1) AS `repetitions`, `name` FROM `test`
      GROUP BY `student_id`, `name`, `course_id`, `course_name`, `score`
      HAVING `repetitions` > 1;
    

    3. 删除重复数据

    思路:分组后,选出 id 最小的一条,不被选中的 id 全部删除

    DELETE FROM `test`
    WHERE `id` NOT IN (
      SELECT `min_id`
      FROM (SELECT min(`id`) AS `min_id`
            FROM `test`
            GROUP BY `student_id`, `name`, `course_id`, `course_name`, `score`) AS `a`
    );
    

    相关文章

      网友评论

          本文标题:mysql 重复数据的处理

          本文链接:https://www.haomeiwen.com/subject/qdqkqctx.html