SQL에서 중복 데이터를 제거하는 여러 가지 방법, 한 번에 모두 고소하겠습니다

SQL을 사용하여 데이터를 추출하고 분석할 때 데이터가 중복되어 중복 제거 후 데이터를 분석해야 하는 시나리오가 자주 발생합니다.

전자 상거래 회사의 판매 보고서를 예로 들어 일반적인 중복 제거 방법으로 distinct 또는 group by 문을 사용합니다.오늘은 창 기능을 사용하여 데이터를 중복 제거하는 새로운 방법을 소개합니다.
여기에 이미지 설명 삽입

[현장 설명]

방문자 ID : 베이비 브라우징을 위해 매장에 입장한 고객

브라우징 시간: 방문자가 스토어 브라우징 페이지에 들어간 날짜

브라우징 시간: 방문자가 페이지를 브라우징하기 위해 매장에 들어오는 시간

이제 상점의 각 방문자와 해당 브라우징 날짜를 알아야 합니다(각 방문자는 하나의 레코드로 같은 날 여러 번 브라우징함).

【문제 해결 아이디어】

방법 1: 구분

SQL은 다음과 같이 작성됩니다.

select distinct 访客id ,浏览时间 
     from 淘宝日销售数据表;

검색 결과:

여기에 이미지 설명 삽입

여러 필드를 중복 제거하기 위해 distinct 문을 사용할 때 다음 두 가지 사항에 특별한 주의를 기울여야 합니다.

1) 고유 구문은 단일 필드 및 다중 필드 중복 제거의 경우 첫 번째 쿼리 필드 앞에 배치되어야 한다고 규정합니다.

2) 테이블의 여러 필드를 중복 제거하는 경우 중복 제거 프로세스는 여러 필드를 전체적으로 중복 제거하는 것입니다. , 이름은 별도로 중복 제거되므로 동일한 방문자 ID는 다른 탐색 시간에 해당합니다.

방법 2: group by

SQL은 다음과 같이 작성됩니다.

select 访客id ,浏览时间
     from 淘宝日销售数据表
group by 访客id ,浏览时间;

검색 결과:

여기에 이미지 설명 삽입

group by 방문자 ID와 열람 시간을 그룹화합니다. 그룹화 및 요약 후 테이블의 행 수가 변경됩니다. 한 행에 하나의 카테고리만 있습니다. group by를 사용하면 방문자 ID와 열람 시간이 그대로 유지됩니다. 범주 및 중복 항목은 표시되지 않습니다.

방법 3: 창 기능

윈도우 함수를 사용하여 중복 제거를 할 때 distinct 및 group by보다 약간 더 복잡하며, 윈도우 함수는 원래 테이블의 행 수를 줄이지 않고 그룹화 후 필드를 정렬합니다. 창 기능에 대한 자세한 설명

창 함수의 기본 구문은 다음과 같습니다.

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)

주제의 요구 사항에 따라 각 방문자와 해당 열람 날짜를 획득하고 방문자 ID, 열람 시간을 그룹화하고 열람 시간(초)을 정렬합니다.

SQL은 다음과 같이 작성됩니다.

select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
     from 淘宝日销售数据表;

검색 결과:

여기에 이미지 설명 삽입

창 기능 쿼리는 각 고객 및 열람 날짜별로 그룹화됩니다.같은 날 여러 열람이 있으면 좋아요 수에 따라 정렬되며 필터 순위는 1이며 각 방문자 및 해당 열람 날짜는 얻을 수 있습니다.

SQL은 다음과 같이 작성됩니다.

select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
     from 淘宝日销售数据表;

검색 결과:

여기에 이미지 설명 삽입

중복 제거를 위한 세 가지 작업이 있습니까? 댓글 영역에 중복 제거 방법을 추가해 주셔서 감사합니다~

Supongo que te gusta

Origin blog.csdn.net/m0_59596937/article/details/130446253
Recomendado
Clasificación