elevne's Study Note
ORACLE GROUP BY, RANK, ROW_NUMBER 본문
이전 시간에 Logstash 에 저장할 데이터를 불러오기 위해 statement 를 작성하며, Oracle 함수 몇몇 개에 대해 알아보게 되었다.
우선 ORACLE 에서 중복데이터를 찾기 위해 GROUP BY 를 사용하였다. 중복되는 데이터 조회를 할 컬럼을 GROUP BY 로 그루핑하고, HAVING 조건문에 COUNT 값이 1 보다 큰 것들만 확인하면 된다. 아래와 같은 쿼리를 작성한다.
SELECT COL1, COUNT(*)
FROM TEST_TABLE
GROUP BY COL1
HAVING COUNT(*) > 1
ORACLE 에는 행 마다 각각의 번호를 부여할 수 있는 방법이 여러가지 있다.
- ROW_NUMBER: 번호의 중복없이 번호를 매김
- RANK: 번호의 중복이 있음. (단 중복된 수만큼 그 다음 번호를 Skip)
- DENSE_RANK: RANK와 같지만 중복된 수만큼 번호 Skip 을 하지 않는다
위 3 개의 함수 전부 아래와 같이 ROW_NUMBER OVER(ORDER BY COL1) AS ROW_NUM 과 같은 형식으로 작성된다. 때에 따라 다르게 상황에 맞춰 적절한 함수를 사용하면 될 것이다. (나의 경우에는 Logstash 에 여러 개의 table 을 참조하는 statement 를 작성하는데 row 별로 다른 값을 가지는 id 가 필요하여 ROW_NUMBER 함수를 사용하였다.)
Reference:
'DB > Oracle' 카테고리의 다른 글
MERGE (Oracle) (0) | 2023.01.19 |
---|---|
SQL 몇 가지 정리해두기! (0) | 2022.10.12 |