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?