이런식으로 쿼리를 짜고 싶습니다.
(mysql사용중)
웹 게시판 하나 만들고 있는데요
페이지당 보여지는 row의 수를 3으로 지정하였구요
한 페이지에 나타난 3개의 row만 오름차순으로 정렬하고 싶은데 어떤식으로 해야할까요..
즉, parameter=1을 받은경우 index 0,1,2 만 내림차순정렬하고 나머지 인덱스는 그대로 두고
parameter=2를 받은경우 3,4,5 만 내림차순하고 나머지 0,1,2,3,4,5,6,7,8,9,10 은 그대로 두고
parameter=3을 받은경우 6,7,8 만 내림차순하고 나머지 0,1,2,3,4,5,6,7,8,9,10 은 그대로 두고
이런식으로 쿼리를 짜고싶은데 어떻게 해야할까요?
-- ORACLE 로 구현되어있습니다. MY-SQL로 변환 하셔야 할겁니다. WITH T ( NM , IDX )AS ( SELECT '정준일' ,0 FROM DUAL UNION ALL SELECT '장현수' ,1 FROM DUAL UNION ALL SELECT '김범수' ,2 FROM DUAL UNION ALL SELECT '호랑이' ,3 FROM DUAL UNION ALL SELECT '고릴라' ,4 FROM DUAL UNION ALL SELECT '신정규' ,5 FROM DUAL UNION ALL SELECT '정재희' ,6 FROM DUAL UNION ALL SELECT '임하윤' ,7 FROM DUAL UNION ALL SELECT '이찬규' ,8 FROM DUAL UNION ALL SELECT '김금식' ,9 FROM DUAL UNION ALL SELECT '홍준표' ,10 FROM DUAL ) SELECT * FROM ( SELECT TRUNC(IDX/3) + 1 GP , NM , IDX , COUNT(*) OVER() - ROWNUM AS IDX_DESC FROM T ) ORDER BY GP , CASE WHEN GP = 1 THEN IDX_DESC ELSE IDX END -- <= GP = 1 : PARAMETER 값으로 넣어주세요.
with t(name, age, inx) as ( select 'name1', 10, 0 from dual union all select 'name2', 11, 1 from dual union all select 'name3', 12, 2 from dual union all select 'name4', 13, 3 from dual union all select 'name5', 14, 4 from dual union all select 'name6', 15, 5 from dual union all select 'name7', 16, 6 from dual union all select 'name8', 17, 7 from dual union all select 'name9', 18, 8 from dual union all select 'name10', 19, 9 from dual union all select 'name11', 20, 10 from dual union all select 'name12', 21, 11 from dual ) select name, age, inx , part, row_idx from ( SELECT name, age, inx , floor(inx/3) part , row_number() over (order by inx asc) row_idx FROM T) order by part asc , case when part = :param - 1 then inx end desc nulls last, inx asc;