๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/59411
ANIMAL_INS ํ
์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ์
๋๋ค. ANIMAL_INS ํ
์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋, ์๋ฌผ ์ข
, ๋ณดํธ ์์์ผ, ๋ณดํธ ์์ ์ ์ํ, ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
ANIMAL_OUTS ํ
์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์์ ์
์ ๋ณด๋ธ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ์
๋๋ค. ANIMAL_OUTS ํ
์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋, ์๋ฌผ ์ข
, ์
์์ผ, ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค.
ANIMAL_OUTS ํ
์ด๋ธ์ ANIMAL_ID๋ ANIMAL_INS์ ANIMAL_ID์ ์ธ๋ ํค์
๋๋ค.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_OUTCOME | VARCHAR(N) | FALSE |
๋ฌธ์
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
์์
์๋ฅผ ๋ค์ด, ANIMAL_INS ํ ์ด๋ธ๊ณผ ANIMAL_OUTS ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
ANIMAL_INS
ANIMAL _ID |
ANIMAL _TYPE |
DATETIME | INTAKE _CONDITION |
NAME | SEX_UPON _INTAKE |
A354597 | Cat | 2014-05-02 12:16:00 |
Normal | Ariel | Spayed Female |
A362707 | Dog | 2016-01-27 12:27:00 |
Sick | Girly Girl | Spayed Female |
A370507 | Cat | 2014-10-27 14:43:00 |
Normal | Emily | Spayed Female |
A414513 | Dog | 2016-06-07 09:17:00 |
Normal | Rocky | Neutered Male |
ANIMAL_OUTS
ANIMAL_ID | ANIMAL_TYPE | DATETIME | NAME | SEX_UPON _OUTCOME |
A354597 | Cat | 2014-06-03 12:30:00 | Ariel | Spayed Female |
A362707 | Dog | 2017-01-10 10:44:00 | Girly Girl | Spayed Female |
A370507 | Cat | 2015-08-15 09:24:00 | Emily | Spayed Female |
SQL๋ฌธ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
ANIMAL_ID | NAME |
A362707 | Girly Girl |
A370507 | Emily |
๋ด๊ฐ ์์ฑํ ์ฝ๋
WITH DATETIME AS (
SELECT AI.ANIMAL_ID, AI.NAME, DATEDIFF(AO.DATETIME, AI.DATETIME) AS DATETIME
FROM ANIMAL_INS AI LEFT JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID=AO.ANIMAL_ID
ORDER BY DATETIME DESC
LIMIT 2
)
SELECT ANIMAL_ID, NAME
FROM DATETIME;
์ฝ๋ ์ค๋ช
- WITH DATETIME AS ( ) : ์์ ํ
์ด๋ธ์ ์ ์ํ๋ค. ์ดํ์ SELECT ๋ฌธ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ๋ด์๋๊ธฐ ์ํ ๊ฒ์ด๋ค.
- SELECT AI.ANIMMAL_ID, AI.NAME, DATEDIFF(AO.DATETIME, AI.DATETIME) AS DATETIME : ANIMAL_INS ํ ์ด๋ธ์ ANIMAL_ID ์ปฌ๋ผ๊ณผ NAME ์ปฌ๋ผ์ ์ ํํ๋ค. DATEDIFF ํจ์๋ฅผ ์ฌ์ฉํด์ ANIMAL_OUTS ํ ์ด๋ธ์ DATETIME๊ณผ ANIMAL_INS ํ ์ด๋ธ์ DATETIME ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DATETIME ์ปฌ๋ผ์ผ๋ก ์ ์ํ๋ค.
- FROM ANIMAL_INS AI LEFT JOIN ANIMAL_OUTS AO : ANIMAL_INS ํ ์ด๋ธ์ AI, ANIMAL_OUTS ํ ์ด๋ธ์ AO๋ก ๊ฐ๋ตํ๊ฒ ์ ์ํ๊ณ , LEFT JOIN์ผ๋ก ๋ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ค. LEFT JOIN์ด๊ธฐ ๋๋ฌธ์ ๋์ํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด NULL์ด ๋๋ค.
- ON AI.ANIMAL_ID = AO.ANIMAL_ID : ANIMAL_INS ํ ์ด๋ธ์ ANIMAL_ID ์ปฌ๋ผ๊ณผ ANIMAL_OUTS ํ ์ด๋ธ์ ANIMAL_ID ์ปฌ๋ผ์์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์จ๋ค.
- ORDER BY DATETIME DESC : DATETIME ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋จผ์ ์ค๋๋ก ์ ๋ ฌํ๋ค.
- LIMIT 2 : ์ ๋ ฌ๋ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์์ ๋ฐ์ดํฐ 2๊ฐ๋ง ์ ํํ๋ค.
- SELECT ANIMAL_ID, NAME : ANIMAL_ID ์ปฌ๋ผ๊ณผ NAME ์ปฌ๋ผ์ ์ ํํ๋ค.
- FROM DATETIME : ์์ ๊ฒฐ๊ณผ ํ ์ด๋ธ DATETIME์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
'ํ๋ก๊ทธ๋๋จธ์ค > ์๊ณ ๋ฆฌ์ฆ ํ์ด(SQL)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค_์กฐ๊ฑด๋ณ๋ก ๋ถ๋ฅํ์ฌ ์ฃผ๋ฌธ์ํ ์ถ๋ ฅํ๊ธฐ (1) | 2024.12.13 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค_๋ณดํธ์์์ ์ค์ฑํ๋ ๋๋ฌผ (2) | 2024.12.12 |
ํ๋ก๊ทธ๋๋จธ์ค_์์๋๋ฐ์ ์์์ต๋๋ค (0) | 2024.11.21 |
ํ๋ก๊ทธ๋๋จธ์ค_์ํ ๋ณ ์คํ๋ผ์ธ ๋งค์ถ ๊ตฌํ๊ธฐ (0) | 2024.11.20 |
ํ๋ก๊ทธ๋๋จธ์ค_์นดํ ๊ณ ๋ฆฌ ๋ณ ๋์ ํ๋งค๋ ์ง๊ณํ๊ธฐ (1) | 2024.11.19 |