반응형

 

 

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이 생성된 이후에 사용해야 한다.

반응형

+ Recent posts