[Mysql] rownum 활용
Mysql은 Oracle과는 다르게 rownum을 지원하지 않아서 커스텀으로 만들어서 사용해줘야 한다.
함수를 사용하여 rownum을 지정해줄 수도 있다.
- 커스텀 rownum
- 함수 row_number()
커스텀 rownum
select @rownum:= @rownum + 1 as rownum, t.*
from table1 t, (select @rownum := 0) r;
select rt.*
from (
select @rownum:= @rownum +1 as rownum, t.*
from table1 as t, (select @rownum := 0) as r
) as rt
where rt.rownum between 2 and 4;
select rt.*
from (
select @rownum:= @rownum +1 as rownum, t.*
from table1 as t, (select @rownum := 0) as r
) as rt
order by rt.age;
부속질의로 사용 시 rownum을 만들고 order by를 하면 순서가 뒤바뀔 수 있다.
select @rownum:= @rownum +1 as rownum, t1.*
from (
select t.*
from table1 as t
order by age desc
) t1, (select @rownum := 0) as r
order by t1.age;
order by 이후에 rownum을 만들어 주자.
row_number() 함수 (Mysql 8버전 이상)
select row_number() over (order by t.age desc) as rownum, t.*
from table1 t;
select row_number() over (order by t.age desc) as rownum, t.*
from table1 t
where t.rownum between 3 and 10;
해당 쿼리는 동작하지 않는다.
from -> where -> select 순서로 동작하므로 where 에서 select에서 동작하는 rownum을 알아볼 수 없다.
select rt.*
from (
select row_number() over (order by t.age desc) as rownum, t.*
from table1 t
) as rt
where rt.rownum between 3 and 10;
부속질의를 활용해서 rownum이 생성된 이후에 사용해야 한다.