프로그래머스SQL - (ISNULL), (JOIN)

2177 단어 sqlsql

- 이름없는 동물의 아이디 : too easy

SELECT ANIMAL_ID from ANIMAL_INS
WHERE 1=1
AND NAME is null
ORDER BY ANIMAL_ID
  • 이름있는 동물의 아이디 : too easy
SELECT ANIMAL_ID from ANIMAL_INS
WHERE 1=1
AND NAME is not null
ORDER BY ANIMAL_ID

- NULL 처리하기 : ★ CASE, THEN, ELSE 문을 까먹고 있었다.

SELECT ANIMAL_TYPE, 
CASE 
    WHEN NAME is null
    THEN 'No name'
    ELSE NAME
    END as NAME, 
SEX_UPON_INTAKE

FROM ANIMAL_INS
  • 없어진 기록 찾기 : 잠깐 고민했다. 나간 기록은 있는데 들어온 기록은 없다. 그렇다면 나간 기록에 Right Join을 한다. 그렇다면 들어온 기록이 없다면 ANIMAL ID 는 Null 값일 것이다.
SELECT ani_o.ANIMAL_ID, ani_o.NAME 
FROM ANIMAL_INS ani_i RIGHT JOIN ANIMAL_OUTS ani_o 
on ani_i.ANIMAL_ID = ani_o.ANIMAL_ID 
WHERE 1=1
AND ani_i.ANIMAL_ID is null
order by ani_o.ANIMAL_ID asc;
  • 있었는데요 없었습니다 : 입양일이 보호시작일보다 빠른 케이스 찾기. 처음 시도로 DateTime -> String -> Int 비교로 하려 했으나 더 쉬운 unix_timestamp 라는 기능을 알게 됐음.
SELECT ani_o.ANIMAL_ID, ani_o.NAME 
FROM ANIMAL_INS ani_i INNER JOIN ANIMAL_OUTS ani_o 
on ani_i.ANIMAL_ID = ani_o.ANIMAL_ID 
WHERE 1=1
AND unix_timestamp(ani_i.DATETIME) > unix_timestamp(ani_o.DATETIME)
order by unix_timestamp(DATE(ani_i.DATETIME)) asc;
  • 오랜 기간 보호한 동물 1 : easy
SELECT ani_i.NAME, ani_i.DATETIME 
FROM ANIMAL_INS ani_i LEFT JOIN ANIMAL_OUTS ani_o 
on ani_i.ANIMAL_ID = ani_o.ANIMAL_ID 
WHERE 1=1
AND ani_o.DATETIME is null
order by ani_i.DATETIME asc
limit 3

- 오랜 기간 보호한 동물 2 : `not equal : <>

SELECT ani_o.ANIMAL_ID, ani_o.ANIMAL_TYPE, ani_o.NAME
FROM ANIMAL_INS ani_i RIGHT JOIN ANIMAL_OUTS ani_o 
on ani_i.ANIMAL_ID = ani_o.ANIMAL_ID 
WHERE 1=1
AND ani_i.DATETIME is not null
AND LEFT(ani_i.SEX_UPON_INTAKE,6) = 'Intact'
AND LEFT(ani_o.SEX_UPON_OUTCOME,6) <> 'Intact'

좋은 웹페이지 즐겨찾기