개발개발/Database

MySql 에서 정렬 후 그룹 하는 방법.

꾸냥 2012. 1. 3. 10:34
사용자들이 올린 글 중에 가장 최신의 글 한개씩만 출력해주는 부분이 필요했다. 정렬 후 그룹화

아무 생각없이 손 가는대로 뭐 되겠지 라는 생각으로 쿼리를 만들었다.

SELECT 
	*
FROM 	
	tableName
GROUP BY 
	tableName.user_idx
ORDER BY 
	tableName.register_date


한눈에 실행해서 봤을땐 "뭐 그룹핑도 되고 최신에 올린것도 뜨네..." 라고 생각을 하고 덮었는데
다시 테스트를 해보니. 사용자별 가장 최신 글이 아닌 그룹된 사용자 중 가장 최신 게시물 순으로 정렬이 되는거 아닌가!!!!

원하는 프로세스는 [정렬 => 그룹화] 인데. 동작하는 프로세스는 [그룹화 => 정렬] 이였다. 제길!!!

해결 방안은 2가지. 우선!
[1안] 테이블 구조를 날짜 역순으로 재설계 해서 order by 를 안씀
[2안] 서브쿼리 난발

테이블 바꾸고 하기 뭐해서 서브쿼리 난발로 처리하기로 했다. 본디 쿼리는 최대한 단순하게 그리고 시스템에서 처리~ 가 주였는데. 뭐...

SELECT * FROM (
	SELECT 
		*
	FROM 	
		tableName
	ORDER BY 
		tableName.register_date
) AS aliasTable
GROUP BY 
	aliasTable.user_idx


반응형