elevne's Study Note

ORACLE GROUP BY, RANK, ROW_NUMBER 본문

DB/Oracle

ORACLE GROUP BY, RANK, ROW_NUMBER

elevne 2022. 12. 24. 20:58

이전 시간에 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:

https://lnsideout.tistory.com/entry/Oracle-%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%A4%91%EB%B3%B5%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%ED%9A%8C-%EB%B0%A9%EB%B2%95%EC%BF%BC%EB%A6%AC%EC%B2%A8%EB%B6%80

https://im-first-rate.tistory.com/36

'DB > Oracle' 카테고리의 다른 글

MERGE (Oracle)  (0) 2023.01.19
SQL 몇 가지 정리해두기!  (0) 2022.10.12