2023년 3월 7일 화요일

sql 에서 row_number 와 over(partition by .. ) 함수

쿼리를 짜다보면 예를들어 테이블에서 일자별로

그룹지어서 조회를 

하는데 일자에서 그룹을사용 했으니 다른 컬럼을

대상으로 그룹함수인 max같은걸써서 조회를

헸다. 그런데 해당 최대값이 같은값으로 여러개인 상태에서 

그 최대값 컬럼중에서 1개만 

선택되야 하고 해당 row의 ID 까지 필요한 상황이 있다. -_-;;




이때 사용하는 함수가 row_number() over(partition by ..) 함수이다.


사용방법은


select row_number() over(partition by mytable.특정컬럼 order by mytable.정렬기준컬럼) as rnum,mytable.* from mytable) as tb where rnum = 1




이렇게 된다. row_number() over(partition by mytable.특정컬럼 order by mytable.정렬기준컬럼) as rnum 이 넘이 특정컬럼을 기준으로 orderby 순서로 순위를 매길수 있다. 1..2..3..4 




그래서 이걸 서브쿼리로 감싸서 where 조건절에서 rnum = 1 인것만 취하면


그룹된 컬럼이 있으면 서 ID까지 존재하는 조회결과가 나온다.




특별한 상황이지만 요로코롬하면 된다.

댓글 없음:

댓글 쓰기