답은 MYSQL구문으로 해주셨으면 합니다..ㅠㅠ
컬럼 a.b가 있는데 GROUP BY b 하는데 개중에 a가 큰 로우를 셀렉트 하고 싶습니다.
id a b
-----------------------------------------------
1 aa f
2 a f
3 bb g
4 cc h
위와 같은 데이터가 존재할때 id 1,3,4로우만 셀렉 하고싶습니다.
즉 GROUP BY b 하는데 개중에 같은 로우가 존재하면 a가 큰 값을 가지고 있는 로우를 셀렉 하려는 겁니다.
지금 쿼리하는데 계속 2가 나와서..ㅠㅠ
rank같은 함수나 있으면 쉽게 할 수도 있을거 같은데.. mysql어렵네요..ㅠㅠ
오늘 하루종일 이것만 하고있습니다. 힌트좀 부탁드립니다 고수님들
mysql 공부할 겸 해봤습니다.
더 좋은 방법이 있을 거예요.
-- 중복 값에 대해 1개만 나와야 할 경우 SELECT * FROM ( SELECT @ROW_NUM := IF(@PREV_B=A.B,@ROW_NUM+1,1) AS RNUM ,A.ID ,A.A ,A.B ,@PREV_B := A.B FROM (SELECT '1' ID, 'AA' A, 'F' B UNION ALL SELECT '2' ID, 'A' A, 'F' B UNION ALL SELECT '3' ID, 'BB' A, 'G' B UNION ALL SELECT '4' ID, 'CC' A, 'H' B UNION ALL SELECT '5' ID, 'AA' A, 'F' B ) A, (SELECT @ROW_NUM := 1) B, (SELECT @PREV_B := '') C ORDER BY A.B , A.A DESC, A.ID ) D WHERE RNUM = 1 -- 중복 값 모두 출력해야할 경우 SELECT * FROM ( SELECT @ROW_NUM := IF(@PREV_B=A.B AND @PREV_A != A.A,@ROW_NUM+1,1) AS RNUM ,A.ID ,A.A ,A.B ,@PREV_B := A.B ,@PREV_A := A.A FROM (SELECT '1' ID, 'AA' A, 'F' B UNION ALL SELECT '2' ID, 'A' A, 'F' B UNION ALL SELECT '3' ID, 'BB' A, 'G' B UNION ALL SELECT '4' ID, 'CC' A, 'H' B UNION ALL SELECT '5' ID, 'AA' A, 'F' B ) A, (SELECT @ROW_NUM := 1) B, (SELECT @PREV_B := '') C ORDER BY A.B , A.A DESC ) D WHERE RNUM = 1