본문 바로가기
java

java) row_number()over, partition, substr, order by

by CodeMango 2023. 2. 17.

row_number()over, partition, substr, order by

오늘 배운 생소한 개념들을 예제로 설명하겠습니다.

 

일정관리- CalendarDao.java 의 코드

String sql = "select seq, id, title, content, rdate, wdate"
+ "   from"
+ "   (select row_number()over(partition by substr(rdate, 1, 8) order by rdate asc) as rnum,"
+ "     seq, id, title, content, rdate, wdate"
+ "   from calendar"
+ "   where id=? and substr(rdate, 1, 6) =?) a " // ?에 id, yyyyMM 들어감 
+ " where rnum between 1 and 5 ";

 

+ "   (select row_number()over(partition by substr(rdate, 1, 8) order by rdate asc) as rnum,"

  • row_number(): 행의 번호를 반환하는 함수입니다. over() 함수와 함께 사용하면, 해당 열을 기준으로 행의 번호를 계산합니다.
  • over(): 윈도우 함수를 사용하기 위한 구문으로, over() 뒤에 윈도우 함수의 파티셔닝 및 정렬을 설정합니다.
  • partition by: over() 함수에서 파티셔닝을 지정하는 구문으로, 지정한 열을 기준으로 파티션을 나누어서 윈도우 함수를 실행합니다.
  • order by: over() 함수에서 정렬을 지정하는 구문으로, 지정한 열을 기준으로 정렬하여 윈도우 함수를 실행합니다.
  • substr(): 문자열을 추출하는 함수로, (rdate, 1, 8) 첫 번째 인자로 전달된 문자열에서 두 번째 인자로 전달된 위치부터 세 번째 인자로 전달된 길이만큼의 문자열을 반환합니다.

위 코드에서 row_number() over(partition by substr(rdate, 1, 8) order by rdate asc) as rnum 부분은, rdate 열을 8자리 문자열로 자른 뒤, 그 값을 기준으로 파티셔닝을 하고, rdate 열을 기준으로 오름차순 정렬을 한 후에, 각 행에 대해 번호를 부여합니다. 이렇게 번호가 부여된 결과를 rnum 열로 반환합니다.

댓글