>  기사  >  데이터 베이스  >  MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

王林
王林앞으로
2023-05-27 21:23:0612636검색

1. 테스트 데이터 삽입

아래 그림의 테스트 데이터에서 user_name이 lilei와 zhaofeng인 사용자는 중복된 데이터입니다.

MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

2. 중복 데이터 제거 방법

1. 방법 1: 개별

코드는 다음과 같습니다(예).

select distinct user_name,email,address from t_user;

아래와 같이 데이터가 제거되고 1개만 삭제됩니다. 의 중복 데이터가 유지됩니다.

MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

2. 방법 2: 그룹별 사용

SELECT user_name,email,address 
	FROM t_user 
	GROUP BY user_name, email, address;

아래 그림과 같이 데이터가 중복 제거되어 1개의 중복 데이터만 남게 됩니다.

MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

3. 방법 3: 윈도우 기능 사용

(1) 데이터베이스가 MySQL8 이상인 경우에는 row_number()

SELECT *
FROM(
    SELECT t.*, 
           ROW_NUMBER() OVER(PARTITION BY user_name
           ORDER BY last_login DESC) rn
    FROM table AS t
	) AS t_user
WHERE rn = 1;

(2) 데이터베이스 버전이 MySQL8보다 낮은 경우 직접 윈도우 기능을 사용할 수 있습니다. , 아래와 같이 row_number() 클래스 메소드

select user_name, email, address 
from (
	select 
		b.*,
		@rownum := @rownum+1 ,-- 定义用户变量@rownum来记录数据的行号
		if(@pdept=b.user_name,@rank:=@rank+1,@rank:=1) as rank,-- 如果当前分组user_name和上一次分组user_name相同,则@rank(对每一组的数据进行编号)值加1,否则表示为新的分组,从1开始
		@pdept:=b.user_name -- 定义变量@pdept用来保存上一次的分组id
	from (select * from t_user) b ,
		(select @rownum :=0 , @pdept := null ,@rank:=0) c  -- 初始化自定义变量值
	order by b.user_name,b.last_login desc -- 该排序必须,否则结果会不对
) result
where rank = 1;

를 사용하여 데이터가 중복 제거되었으며 1개의 중복 데이터만 유지됩니다.

MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?

위 내용은 MySQL에서 중복 쿼리를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제