[mysql/oracle] 오랜 기간 보호한 동물(2)
2023. 7. 27. 18:52ㆍProgrammers/SQL
문제 설명
문제
결과
mysql 1
1
2
3
4
5
6
7
8
9
|
SELECT ANIMAL_ID, NAME
FROM (
SELECT A.ANIMAL_ID, A.NAME,
RANK() OVER(ORDER BY B.DATETIME - A.DATETIME DESC) AS PERIOD
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY PERIOD
) a
WHERE PERIOD IN (1,2)
|
cs |
: mysql은 서브쿼리에 alias 필수!
oracle 1
1
2
3
4
5
6
7
8
9
|
SELECT ANIMAL_ID, NAME
FROM (
SELECT A.ANIMAL_ID, A.NAME,
RANK() OVER(ORDER BY B.DATETIME - A.DATETIME DESC) AS PERIOD
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY PERIOD
)
WHERE PERIOD IN (1,2)
|
cs |
오랜기간 보호한 동물을 뽑는 것이기 때문에
(입양 간 날짜 - 보호시작한 날짜)를 계산해서 rank로 줄 세운다 → DATE 타입끼리는 기본적인 연산 가능
그리고 1, 2위 기간으로 조건을 걸면 된다.
mysql2
1
2
3
4
5
|
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2
|
cs |
: mysql에서는 LIMIT으로 출력할 row의 수를 정할 수 있다.
oracle2
1
2
3
4
5
6
7
|
SELECT ANIMAL_ID, NAME
FROM (SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
)
WHERE ROWNUM < 3
|
cs |
'Programmers > SQL' 카테고리의 다른 글
[mysql/oracle] 우유와 요거트가 담긴 장바구니 (0) | 2023.09.04 |
---|---|
[mysql/oracle] 보호소에 중성화한 동물 (0) | 2023.09.04 |
[mysql/oracle] 없어진 기록 찾기 (0) | 2023.07.10 |
[mysql/oracle] 오랜 기간 보호한 동물(1) (0) | 2023.07.05 |
[mysql/oracle] 있었는데요 없었습니다 (0) | 2023.07.05 |