Animal Table2 - Oracle
https://programmers.co.kr/learn/challenges?tab=all_challenges
๊ณ ์์ด์ ๊ฐ๋ ๋ช ๋ง๋ฆฌ ์์๊น
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ๊ณ ์์ด์ ๊ฐ๊ฐ ๊ฐ๊ฐ ๋ช ๋ง๋ฆฌ์ธ์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์ ์ด๋ ๊ณ ์์ด๋ฅผ ๊ฐ๋ณด๋ค ๋จผ์ ์กฐํํด์ฃผ์ธ์.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
๋ฃจ์์ ์๋ผ ์ฐพ๊ธฐ
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ์ด๋ฆ์ด Lucy, Ella, Pickle, Rogan, Sabrina, Mitty์ธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์์ด๋ ์์ผ๋ก ์ ๋ ฌ
= ์ฌ๋ฌ๊ฐ์ง์ ๊ฐ๋ค์ ๋ชจ์์ ์ถ๋ ฅํ๋ผ
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID
์ปฌ๋ผ์์ ์ฌ๋ฌ๊ฐ์ง์ ๊ฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ IN ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค!
์ด๋ค ๊ฐ๋ค์ ์ ์ธํ๊ณ ํ์ธํ๋ ๋ฐฉ๋ฒ์ NOT IN ํค์๋๋ฅผ ์ฌ์ฉํ๋ค!
์ด๋ฆ์ el์ด ๋ค์ด๊ฐ๋ ๋๋ฌผ ์ฐพ๊ธฐ
๋ฌธ์ : ๋ณดํธ์์ ๋์๊ฐ์ ํ ๋จธ๋๊ฐ ๊ธฐ๋ฅด๋ ๊ฐ๋ฅผ ์ฐพ๋ ์ฌ๋์ด ์ฐพ์์์ต๋๋ค. ์ด ์ฌ๋์ด ๋งํ๊ธธ ํ ๋จธ๋๊ฐ ๊ธฐ๋ฅด๋ ๊ฐ๋ ์ด๋ฆ์ 'el'์ด ๋ค์ด๊ฐ๋ค๊ณ ํฉ๋๋ค. ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค, ์ด๋ฆ์ "EL"์ด ๋ค์ด๊ฐ๋ ๊ฐ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์. ๋จ, ์ด๋ฆ์ ๋์๋ฌธ์๋ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE='Dog' AND LOWER(NAME) LIKE '%el%'
ORDER BY NAME
LIKE๊น์ง๋ ๊ธฐ์ต๋ฌ๋ค %๊ฐ ๋ถ์ผ๋ฉด ์๋ค๋ก ๋ญ๊ฐ์๋ ์๊ด์์ด ์ฐพ๋๊ฑฐ์๋ค.
EL์ด ๋ค์ด๊ฐ๋ ๊ฑด๋ฐ ๋์๋ฌธ์ ์๊ด์์ด์ ์๋ฌธ์, ๋๋ฌธ์ like๋ฌธ์ ๋ชจ๋ ์ฌ์ฉํด๋ณด์์ง๋ง ํ๋ ธ๋ค๊ณ ํด์ ์ฐพ์๋ณด๋๊น LOWER(ํ๋) ํจ์๋ฅผ ์ฌ์ฉํด์ NAME๊ฐ๋ค์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ง๋ค๊ณ el์ ์ฐพ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ผ
์ค์ฑํ ์ฌ๋ถ ํ์
ํ๊ธฐ
๋ฌธ์ : ๋ณดํธ์์ ๋๋ฌผ์ด ์ค์ฑํ๋์๋์ง ์๋์ง ํ์ ํ๋ ค ํฉ๋๋ค. ์ค์ฑํ๋ ๋๋ฌผ์ SEX_UPON_INTAKE ์ปฌ๋ผ์ 'Neutered' ๋๋ 'Spayed'๋ผ๋ ๋จ์ด๊ฐ ๋ค์ด์์ต๋๋ค. ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ค์ฑํ๊ฐ ๋์ด์๋ค๋ฉด 'O', ์๋๋ผ๋ฉด 'X'๋ผ๊ณ ํ์ํด์ฃผ์ธ์.
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
ELSE 'X'
END
AS ์ค์ฑํ
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
์กฐ๊ฑด๋ฌธ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด์๋ค. CASE๋ฌธ ๋ฐ์ WHEN+THEN์ ์ฌ์ฉํด์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ELSE์ ์ฌ์ฉํด์ ๋๋จธ์ง ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค.
์ต์๊ฐ ๊ตฌํ๊ธฐ
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ธ์ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT MIN(DATETIME)
FROM ANIMAL_INS
minํจ์๋ฅผ ์ฌ์ฉํด์ ํด๋น ์ปฌ๋ผ๋ค ์ค์์ ๊ฐ์ฅ ์ต์๊ฐ์ ์ฐพ์ ์ ์๋ค.
๋๋ฌผ ์ ๊ตฌํ๊ธฐ
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๋๋ฌผ์ด ๋ช ๋ง๋ฆฌ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT COUNT(*)
// SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS
countํจ์๋ฅผ ์ฌ์ฉํด์ ์ํ๋ ์ปฌ๋ผ์ ์ซ์๊ฐ ๋ช๊ฐ๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ค๋ณต ์ ๊ฑฐํ๊ธฐ
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ด๋ฆ์ ๋ช ๊ฐ์ธ์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ด๋ฆ์ด NULL์ธ ๊ฒฝ์ฐ๋ ์ง๊ณํ์ง ์์ผ๋ฉฐ ์ค๋ณต๋๋ ์ด๋ฆ์ ํ๋๋ก ์น๋ค.
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
COUNT ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , distinct ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ null ๊ฐ์ ์ ๊ฑฐํด์ฃผ๊ธฐ ์ํด์ where ์ ์์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
NULL ์ฒ๋ฆฌํ๊ธฐ
๋ฌธ์ : ์ ์ ๊ฒ์ํ์ ๋๋ฌผ ์ ๋ณด๋ฅผ ๊ฒ์ํ๋ ค ํฉ๋๋ค. ๋๋ฌผ์ ์๋ฌผ ์ข , ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ NULL์ด๋ผ๋ ๊ธฐํธ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ์ด๋ฆ ์๋ ๋๋ฌผ์ ์ด๋ฆ์ "No name"์ผ๋ก ํ์ํด์ฃผ์ธ์
SELECT ANIMAL_TYPE, NVL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
NVL ์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ : ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ null์ธ ๊ฒฝ์ฐ์ ๋ ๋ฒ์งธ ์ธ์ ๊ฐ์ ๋ฐํํ๋ ํจ์์ด๋ค.
NVL2(param1, param2, param3) : param1์ด null์ผ ๊ฒฝ์ฐ์๋ param2๋ฅผ ๋ฐํํ๊ณ , null์ด ์๋ ๊ฒฝ์ฐ์๋ param3์ ๋ฐํํ๋ ๋ฐฉ๋ฒ
๋๋ช
๋๋ฌผ ์ ์ฐพ๊ธฐ
๋ฌธ์ : ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค ๋ ๋ฒ ์ด์ ์ฐ์ธ ์ด๋ฆ๊ณผ ํด๋น ์ด๋ฆ์ด ์ฐ์ธ ํ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ง๊ณ์์ ์ ์ธํ๋ฉฐ, ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์.
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME HAVING COUNT(NAME)>=2
ORDER BY NAME
์
์ ์๊ฐ ๊ตฌํ๊ธฐ(1)
๋ฌธ์ : ๋ณดํธ์์์๋ ๋ช ์์ ์ ์์ด ๊ฐ์ฅ ํ๋ฐํ๊ฒ ์ผ์ด๋๋์ง ์์๋ณด๋ ค ํฉ๋๋ค. 09:00๋ถํฐ 19:59๊น์ง, ๊ฐ ์๊ฐ๋ณ๋๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค.
SELECT TO_CHAR(DATETIME, 'HH24') AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME, 'HH24')
HAVING TO_CHAR(DATETIME, 'HH24') BETWEEN 9 AND 19
ORDER BY TO_CHAR(DATETIME, 'HH24')
์๊ฐ์ ์กฐํํ๊ธฐ ์ํด์๋ to_charํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๊ณ ์ถ์ถ์ ๋ ์ง์ ํฌ๋งท์ ๋ฃ์ด์ ์ถ์ถํ ์ ์๋๋ฐ, ์ด๋ฒ ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์๊ฐ์ ๋จ์๋ก ์ก์๊ธฐ ๋๋ฌธ์ 'HH24'๋ก ์ก์์ ์กฐ๊ฑด๋๋ก ๋ฃ๊ณ ์ ๋ ฌํด์ ์ถ๋ ฅ
DATETIME์์ DATE๋ก ํ ๋ณํ
๋ฌธ์ : ANIMAL_INS ํ ์ด๋ธ์ ๋ฑ๋ก๋ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด, ๊ฐ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ๋ค์ด์จ ๋ ์ง๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์์ด๋ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT ANIMAL_ID, NAME, TO_CHAR(DATETIME, 'YYYY-MM-DD') AS ๋ ์ง
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
์ด๊ฑฐ๋จผ์ ํ๊ณ ์์ ๋ฌธ์ ๋ฅผ ํธ๋๊ฑฐ๊ตฌ๋... ์ด์ ์ to_char ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ ต์ง ์๊ฒ ํ ์ ์๋ ๋ฌธ์ ์์
Last updated
Was this helpful?