[SQL] Duplicates

less than 1 minute read


Duplicates

-- b와 c를 모두 고려하여 (해당 조합이) 2개 이상인(중복된) row 알아보기
SELECT 
	 b, c, count(1)
FROM t1
GROUP BY b, c
HAVING count(*) > 1



/*
b와 c를 모두 고려하여 (해당 조합이) 2개 이상인(중복된) 모든 row 가져오기
앞의 query와 달리 부가적인 정보 + 중복된 모든 행을 가져올 수 있음
*/
SELECT t1.a ,t1.b ,t1.c ,t1.d
FROM t1
JOIN (
	SELECT b, c, count(1)
	FROM t1
	GROUP BY b, c
	HAVING count(1) > 1
) AS t2
	ON t1.b = t2.b
	AND t1.c = t2.c

/*
b와 c를 모두 고려하여 (해당 조합이) 2개 이상인(중복된) 모든 row 중
d를 기준으로 첫 번째 행만 filter 한 뒤 (즉, 중복된 값 제거)
a열만 가져오기
*/
SELECT
	t1.a 
FROM (
	SELECT 
		 a 
		,b 
		,c 
		,d 
		,ROW_NUMBER() OVER (
			PARTITION BY b, c 
			ORDER BY d DESC) AS row_num
	FROM table1 
) AS t1
WHERE t1.row_num > 1

Tags:

Categories:

Updated: