mysql重複データの処理
1592 ワード
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
の最小の1つを選択し、選択されていない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`
);