๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ (SQL ๋ฌธ์ ํ์ด)
https://school.programmers.co.kr/learn/courses/30/lessons/59411

๐ ๋ฌธ์ ๊ฐ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ(ANIMAL_INS)๊ณผ ์
์์ ๊ฐ ๋๋ฌผ(ANIMAL_OUTS)์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก,
์
์๋ ๋๋ฌผ ์ค ๋ณดํธ์์ ๊ฐ์ฅ ์ค๋ ๋จธ๋ฌธ ๋๋ฌผ 2๋ง๋ฆฌ์ ID์ ์ด๋ฆ์ ์กฐํํ๋ ๋ฌธ์ ๋ค.
๋ณดํธ ๊ธฐ๊ฐ์ ์ ์์ผ - ์ ์์ผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ๋ฉฐ, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์ ๋ ฌํ๋ค.
๐๏ธ ํ ์ด๋ธ ๊ตฌ์กฐ
ANIMAL_INS
ANIMAL_ID | VARCHAR(N) | ๋๋ฌผ์ ID (๊ธฐ๋ณธํค) |
ANIMAL_TYPE | VARCHAR(N) | ๋๋ฌผ ์ข |
DATETIME | DATETIME | ๋ณดํธ ์์์ผ |
INTAKE_CONDITION | VARCHAR(N) | ์ ์ ์ํ |
NAME | VARCHAR(N) | ์ด๋ฆ (nullable) |
SEX_UPON_INTAKE | VARCHAR(N) | ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ |
ANIMAL_OUTS
ANIMAL_ID | VARCHAR(N) | ๋๋ฌผ์ ID (์ธ๋ํค) |
ANIMAL_TYPE | VARCHAR(N) | ๋๋ฌผ ์ข |
DATETIME | DATETIME | ์ ์์ผ |
NAME | VARCHAR(N) | ์ด๋ฆ (nullable) |
SEX_UPON_OUTCOME | VARCHAR(N) | ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ |
โ ๋ฌธ์ ์๊ตฌ์ฌํญ
- ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธด ๋๋ฌผ 2๋ง๋ฆฌ๋ง ์กฐํ
- ์ถ๋ ฅ ์ปฌ๋ผ์ ANIMAL_ID, NAME
- ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ์๋ฌด ๊ธฐ์ค ์์ด ์ถ๋ ฅ ๊ฐ๋ฅ
- ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์ ๋ ฌ
๐งพ ๋ด๊ฐ ์ฒ์ ์์ฑํ ์ฝ๋
SELECT ins.ANIMAL_ID, ins.NAME
FROM ANIMAL_INS ins
JOIN (
SELECT i.ANIMAL_ID, i.NAME, DATEDIFF(o.DATETIME, i.DATETIME) AS day_diff
FROM ANIMAL_INS i
JOIN ANIMAL_OUTS o ON i.ANIMAL_ID = o.ANIMAL_ID
ORDER BY day_diff DESC
LIMIT 2
) n ON n.ANIMAL_ID = ins.ANIMAL_ID;
โ ๏ธ ๊ฐ์ ํฌ์ธํธ
- ANIMAL_INS๋ฅผ ์๋ธ์ฟผ๋ฆฌ ์๊ณผ ๋ฐ์์ ๋ ๋ฒ ๋ถํ์ํ๊ฒ ์ฌ์ฉ
- ์ด๋ฏธ ํ์ํ ์ปฌ๋ผ์ด ์๋ธ์ฟผ๋ฆฌ์์ ๋ค ๋์ค๋๋ฐ๋ ๋ค์ ์กฐ์ธํจ
- day_diff๋ ORDER BY์์๋ง ์ฌ์ฉ๋๋ฏ๋ก ๊ตณ์ด AS๋ก ํํํ ํ์ ์์
๐ป ์ต์ข SQL
SELECT i.ANIMAL_ID, i.NAME
FROM ANIMAL_INS i
JOIN ANIMAL_OUTS o ON i.ANIMAL_ID = o.ANIMAL_ID
ORDER BY DATEDIFF(o.DATETIME, i.DATETIME) DESC
LIMIT 2;
๐งพ ์ถ๋ ฅ ์์
A362707 | Girly Girl |
A370507 | Emily |
โ๏ธ ์ ๋ฆฌ
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํตํด ๋ฐฐ์ด ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- DATEDIFF ํจ์๋ ๋ ๋ ์ง์ ์ผ ์ ์ฐจ์ด๋ฅผ ๊ตฌํ ๋ ์ฌ์ฉํ๋ค.
- DATEDIFF(์ ์์ผ, ์ ์์ผ)์ ํํ๋ก ์ฌ์ฉ
- ํํ๋ง ํ๊ณ ์ถ์ง ์์ ์ปฌ๋ผ์ ORDER BY์ ์ง์ ํจ์ ํํ๋ก ๋ฃ์ผ๋ฉด ๋๋ค.
- ๊ผญ AS๋ก ๋ณ์นญ์ ์ค ํ์๋ ์๋ค
- ๋ถํ์ํ ์กฐ์ธ๊ณผ ์๋ธ์ฟผ๋ฆฌ๋ ํผํ์.
- ํ์ํ ์ปฌ๋ผ์ด ์๋ค๋ฉด ์ฒ์๋ถํฐ ์กฐ์ธํ ๊ฒฐ๊ณผ์์ ์ ๋ ฌ๊ณผ ์ ํ์ ๋ฐ๋ก ์ฃผ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค
์ถ๊ฐ๋ก LIMIT์ ํ์ฉํด์ ์ํ๋ ๊ฐ์๋ง ๋ฝ๋ ๋ฐฉ๋ฒ๋ ๋ณต์ตํ ์ ์์๊ณ ,
๋ฐ์ดํฐ๊ฐ ๋ง์์ง ๊ฒฝ์ฐ์ ์ด๋ฐ ์กฐ์ธ์ ํจ์จ์ฑ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋๊ปด์ง ์ ์๋ค๋ ์ ๋ ์๊ฒ ๋์๋ค.