MYSQL GROUP BY 용법 상세 설명

2865 단어 mysqlgroupby
배경 설명
최근 에 데이터 베 이 스 를 설계 할 때 고려 가 주도면밀 하지 못 해서 대량의 중복 데이터 가 생 겼 다.이 중 복 된 데 이 터 를 삭제 해 야 합 니 다.사용 한 문 구 는 Group By 입 니 다.이 문장의 역할 을 좀 더 이해 하기 위해 서 나 는 먼저 간단 한 것 부터 시작 할 계획 이다.
테스트 표를 작성 하 다
create table test_group(id int auto_increment primary key, name varchar(32), class varchar(32), score int);
뷰 시트 구조
desc test_group

데이터 삽입

테스트 시작
나 는 현재 모든 반 에서 가장 높 은 점 수 를 받 고 있 는 학우 가 누구 인지 알 고 싶다.
select name, class , max(score) from test_group group by class;

자,이제 중복 되 는 데 이 터 를 몇 개 삽입 할 수 있 습 니 다.
insert into test_group(name, class, score)values('repeat','B',89);

현재 중 복 된 데 이 터 를 걸 러 내 고 최신 기록 을 유지 해 야 합 니 다.일반적으로 우 리 는 최신 기록 이 마지막 에 삽 입 된 것 이 라 고 가정 하기 때문에 그의 ID 는 가장 큰 것 이 어야 한다.
select name, class, max(id) from test_group group by name;

우 리 는 그 항목 의 중복 성에 관심 을 가지 고 gourp by 뒤에 두 는 것 을 발견 할 수 있다.이렇게 하면 우 리 는 이 항목 과 중복 되 는 기록 들 을 걸 러 낼 수 있다.지금 우 리 는 우리 가 필요 로 하 는 데 이 터 를 얻 었 다.우 리 는 다음 단 계 는 중복 되 는 데 이 터 를 삭제 하 는 것 이다.우리 가 걸 러 낸 데이터 기록 과 기 존의 기록 을 구분 하기 위해 서 우 리 는 id 에 별명 을 지 을 수 있 습 니 다.
select name, class, max(id) as max_id from test_group group by name;

다음 단 계 는 이러한 관심 의 데 이 터 를 보존 하 는 것 이다.나 는 먼저 이 데이터id를 추출 하 는 것 이다.이것 은 유일 하 게 기록 을 확정 하 는 것 이기 때문이다.
select max_id from (select name, class, max(id) as max_id from test_group group by name)b;

다음은 삭제 작업 입 니 다.아 이 디 어 는 데이터 ID 가 우리 조회 결과 에 없 는 기록 을 삭제 하 는 것 입 니 다.조작 후 데이터 에 대한 대 비 를 편리 하 게 하기 위해 서 나 는 먼저 모든 조 회 를 진행 했다.
select * from test_group;

삭제 작업 을 실행 합 니 다.
delete from test_group where id not in (select max_id from (select name, class, max(id) as max_id from test_group group by name)b);
마지막 으로 결 과 를 보다.

총결산
MySQL 작업 은 유연 합 니 다.예전 에 ORM 을 좋아 했 는데 지금 은 MYSQL 을 직접 사용 하 는 것 이 많은 일 을 절약 한 것 같 습 니 다.더 좋 고 효율 적 인 방법 이 있다 면 공유 해 주세요~
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기