[프로그래머스] String, Date LEVEL 2 문제 풀이

1. 루시와 엘라 찾기

  • 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL문을 작성하라.

  • 결과는 아이디 순으로 조회하라.
  • OR 조건으로 각 이름이 NAME 컬럼에 매칭되는 조건만 선별하면 된다.
SELECT ANIMAL_ID, NAME , SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME = 'Ella' OR NAME='Lucy' OR NAME = 'Pickle' 
OR NAME = 'Rogan' OR NAME = 'Sabrina' OR NAME = 'Mitty';

2. 이름에 el 이 들어가는 동물 찾기

  • 보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔다. 이 사람이 말하길 할머니가 기르던 개는 이름에 ‘el’이 들어간다고 한다. 동물 보호소에 들어온 동물 이름 중, 이름에 ‘EL’이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성하라.
  • 이때 결과는 이름 순으로 조회해주어야 한다. 단, 이름의 대소문자는 구분하지 않는다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;

3. 중성화 여부 파악하기

  • 보호소의 동물이 중성화 되었는지 아닌지 파악하려 한다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 ‘Neutered’ 또는 ‘Spayed’라는 단어가 들어있다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성하라
  • 이 때 중성화가 되어있다면 ‘O’, 아니라면 ‘X’라고 표시해야 한다.
  • 여기서는 CASE에 조건을 쓴다. WHEN에 SEX_UPON_INTAKE가 ‘Neutered’나 ‘Spayed’라는 단어를 포함하고 있다면 THEN을 통해 ‘O’ 표시, 아니면 ELSE를 통해 ‘X’를 표현한다. 그리고 END로 마무리하고 ORDER BY를 통해 ‘ANIMAL_ID’를 기준으로 정렬해준다.
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X' END AS '중성화' FROM ANIMAL_INS
ORDER BY 'ANIMAL_ID';

4. [LEVEL 3] 오랜 기간 보호한 동물(2)

  • 입양간 동물 중 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성하라. 이때 결과는 보호 기간이 긴 순으로 조회해야 한다.
  • 각각의 두개의 테이블에 존재하는 데이터를 찾고 DATETIME의 시간을 뺴주면 보호 기간이 나온다. 이 보호 기간이 긴 순으로 보기 위해서 DESC를 이용한다. 그리고 상위 2개이기 때문에 LIMIT을 이용해 2개로 제한한다.
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2;	

5. DATETIME에서 DATE로 형 변환

  • ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성하라.
  • 이 때 결과는 아이디 순으로 조회해야 한다.
  • 날짜 데이터를 포멧을 직접적으로 지정해주면 된다. ‘%Y-%m-%d’의 형식대로 지정하고 이를 ‘날짜’ 컬럼으로 불러온다.
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜' 
FROM ANIMAL_INS
ORDER BY "ANIMAL_ID";

Categories:

Updated:

Leave a comment