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 열로 반환합니다.
'java' 카테고리의 다른 글
[java] Generics(제네릭), Collection(컬렉션)-list, map (0) | 2023.02.20 |
---|---|
[java] 다형성 (0) | 2023.02.19 |
Java) String.format 을 이용한 문자열 형식 설정하기 (0) | 2023.02.16 |
[JAVA] forEach문 사용이유 (0) | 2023.02.10 |
[JAVA] Collection, Iterator , JAVA (hashmap, treemap, 디자인패턴-싱글턴) (0) | 2023.02.08 |
댓글