개발/DB

[Mysql] 순위 구하기 (limit, rank())

Walon_ 2021. 11. 15. 16:46

 

1. limit 사용

order by 까지 한 후 row수를 설정해 출력한다.

order by 까지 전부 로드 한 후 수행하기 때문에 성능에 신경써야 한다. (인덱스도 타지 않음)

SELECT outs.animal_id, outs.name
from animal_outs outs, animal_ins ins
where outs.animal_id = ins.animal_id
order by outs.datetime - ins.datetime desc
limit 2

 

2. rank() 사용

rank()를 사용하여 정해진 조건에 따른 순위컬럼을 생성

그 순위컬럼을 사용하여 원하는 순위row만 출력

SELECT 
    A.ANIMAL_ID
    ,A.NAME
FROM (
    SELECT A.ANIMAL_ID
        ,A.NAME
        ,RANK() OVER (ORDER BY DATEDIFF(A.DATETIME,B.DATETIME) DESC) AS 'RANKING' 
    FROM ANIMAL_OUTS A LEFT OUTER JOIN ANIMAL_INS B ON (A.ANIMAL_ID = B.ANIMAL_ID) 
    WHERE B.DATETIME IS NOT NULL
) A
WHERE A.RANKING IN (1,2)

 

 

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/59411?language=mysql 

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr