inblog logo
|
soultree
    SQLOracle

    [SQL] TOP-N 쿼리 (ROWNUM)

    Oracle에서는 MySQL과는 다르게 `LIMIT`을 사용할 수 없다. 따라서, `ROWNUM`을 통해 다른 방법으로 TOP N개를 추출해야 한다. 주로, 빌보드 차트 TOP 100과 같이 위에서 N개를 추출할 때 사용한다.
    Hi's avatar
    Hi
    Aug 20, 2024
    [SQL] TOP-N 쿼리 (ROWNUM)
    Contents
    ✅ 1. ROWNUM✅ 2. 그 외

    💡
    Oracle에서는 MySQL과는 다르게 LIMIT을 사용할 수 없다. 따라서, ROWNUM을 통해 다른 방법으로 TOP N개를 추출해야 한다.
    주로, 빌보드 차트 TOP 100과 같이 위에서 N개를 추출할 때 사용한다.
    ✅ 1. ROWNUM☑️ 1) 올바른 예시☑️ 2) 잘못된 예시☑️ 3) 예외로 = 1은 가능함☑️ 4) 주의 사항✅ 2. 그 외
     

    ✅ 1. ROWNUM

    💡
    ORACLE은 ROWNUM이라는 가짜 컬럼을 가지고 있다. 사용자가 따로 정의한 컬럼이 아닌, 시스템 상에서 존재하는 컬럼이다. ROWNUM은 데이터의 순번을 나타낸다.
     

    ☑️ 1) 올바른 예시

    notion image
    ROWNUM을 WHERE 절에 사용하여 데이터를 특정 개수만큼 가져올 수 있다.
     

    ☑️ 2) 잘못된 예시

    단, 주의할 점은
    ROWNUM은 WHERE ROWNUM = 5와 같은 조건을 사용할 수 없다.
    notion image
    그 대신, WHERE ROWNUM < 5 와 같은 조건식을 사용해야 한다.
     

    ☑️ 3) 예외로 = 1은 가능함

    예외로, WHERE ROWNUM = 1은 사용이 가능하다.
    notion image
     
     

    ☑️ 4) 주의 사항

    또 주의할 점은,
    ORDER BY 절이 WHERE 절보다 나중에 수행되기 때문에 ROWNUM으로 순서를 지정할 때에는 ORDER BY 절 바깥에서 해야 한다. ROWNUM과 ORDER BY를 같은 단락에서 작성하게 될 경우 ROWNUM으로 랜덤하게 순서가 지정된 후 ORDER BY로 정렬되기 때문이다.
     
    notion image
    잘못된 경우. ROWNUM이 먼저 부여되고, 10개를 가져와 정렬함.
     
    notion image
    올바른 경우. 정렬된 데이터를 가져와 ROWNUM을 부여하고, 상위 10개를 가져옴.
     

    ✅ 2. 그 외

    💡
    그 외에도 RANK나 DENSE_RANK를 사용할 수 있지만, 이들은 중복 순위가 부여될 수 있기 때문에 상황에 맞게 선택해야 한다.
     
    Share article
    Contents
    ✅ 1. ROWNUM✅ 2. 그 외

    soultree

    RSS·Powered by Inblog