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

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

1
2
3
4
5
6
7
8
SELECT
    *
FROM   
    tableName
GROUP BY
    tableName.user_idx
ORDER BY
    tableName.register_date


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

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

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

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

1
2
3
4
5
6
7
8
9
10
SELECT * FROM (
    SELECT
        *
    FROM   
        tableName
    ORDER BY
        tableName.register_date
) AS aliasTable
GROUP BY
    aliasTable.user_idx