-
[Mysql] 순위 구하기 (limit, rank())개발/DB 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