눈팅만 하다 도저히 모르는 문제가 발생하여 문의 드립니다.
1. A라는 테이블을 검색
2. A라는 테이블에서 B가 중복된것 찾기
3. A라는 테이블에서 중복된 B 중에서 C 가 가장 큰 값을 제외한 나머지
A- 테이블
B-컬럼1
C-컬럼2=값
문제는 두번째 A라는 테이블에서 B가 중복된 것을 카운트까지는 했는데 세번째가 안되네요
원래 문제는 A라는 테이블에서 중복된 B 값중에서 C의 값이 가장 큰놈을 빼고 삭제하는 것입니다.
두번째 쿼리
select infraid,cnt,maxrssi from(SELECT infraid, count(*) AS cnt FROM aplist GROUP BY infraid)
where cnt>1
세번재 쿼리 =안됨
select maxrssi from aplist where maxrssi not in max(maxrssi)
두번째 쿼리
select infraid,cnt,maxrssi from(SELECT infraid, count(*) AS cnt FROM aplist GROUP BY infraid)
where cnt>1
-> 위의 쿼리에서 maxrssi이라는 컬럼은 어디서나온건가요?
select infraid, col2
from aplist, (SELECT infraid in, max(col2) ma FROM aplist GROUP BY infraid having count(*) > 1) tab
where aplist.infraid =tab.in and aplist.col2 != tab.ma;
-> 위의 쿼리형태로수행하면 되지 않을까요?
-- 1. 중복 자료 찾기 SELECT b , MAX(c) FROM a GROUP BY b HAVING COUNT(*) > 1 ; -- 2. 중복 자료 삭제 대상 찾기 SELECT a.b, a.c FROM a , (SELECT b -- , MAX(c) , MAX(c) c FROM a GROUP BY b HAVING COUNT()* > 1 ) b WHERE a.b = b.b AND a.c < b.c ; -- 3. 중복 자료 삭제 DELETE FROM a WHERE (b, c) IN (SELECT a.b, a.c FROM a , (SELECT b -- , MAX(c) , MAX(c) c FROM a GROUP BY b HAVING COUNT()* > 1 ) b WHERE a.b = b.b AND a.c < b.c ) ;
-- 다른 방식. c 가 더 큰게 존재하면 삭제 DELETE FROM a m WHERE EXISTS (SELECT 1 FROM a WHERE b = m.b AND c > m.c )