반응형

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 루시와 엘라 찾기

  동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별을 출력하는 문제이다.

 

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

 

  where 절에서 name = '~' || '~' || ... 꼴로 작성할 수도 있지만 in 연산자를 통해 더 쉽게 구현할 수 있다.

 

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

  동물 보호소에 들어온 동물 중 이름에 "EL"이 들어가는 개의 아이디와 이름을 이름 순으로 출력하는 문제이다.

SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE ANIMAL_TYPE = 'Dog' AND
          NAME LIKE '%EL%'
    ORDER BY NAME

 

  name 컬럼에서 문자열 "el"이 들어간 레코드를 찾기 위해서 like 연산자와 % 기호 연산자를 사용했다.

  이름이 el로 시작하는 경우 El, 아니면 el이 들어가지만 case insensitive하기 때문에 '%EL%'로 했다.

 

3. 중성화 여부 파악하기

  동물 보호소의 동물의 아이디, 이름, 중성화 여부를 아이디 순으로 출력하는 문제이다.

SELECT ANIMAL_ID, NAME,
       (CASE WHEN SEX_UPON_INTAKE REGEXP 'Neutered|Spayed' THEN 'O'
             ELSE 'X' END) AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

  sex_upon_intake 컬럼의 값이 주어진 내용을 포함하는 문자열인지를 확인하기 위해서 like를 사용할 수도 있으나 그럴 경우 when을 한 줄 더 작성해야 하기 때문에 정규표현식 regexp를 사용했다.

  regexp를 사용하여 찾고자 하는 부분 문자열을 '|'로 연결하여 작성한다.

  따라서 중성화 컬럼은 (CASE WHEN SEX_UPON_INTAKE REGEXP 'Neutered|Spayed' THEN 'O' ELSE 'X' END) AS "중성화"라고 작성하면 된다.

 

 

 

4. 오랜 기간 보호한 동물(2)

  입양을 간 동물 중 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 보호 기간이 긴 순으로 출력하는 문제이다.

SELECT O.ANIMAL_ID, O.NAME
    FROM ANIMAL_OUTS O, ANIMAL_INS I
    WHERE O.ANIMAL_ID = I.ANIMAL_ID
    ORDER BY O.DATETIME - I.DATETIME DESC
    LIMIT 2

 

  우선 보호 기간이라는 것이 보호소에서 나간 날짜에서 보호소에 들어온 날짜 이므로 보호소에 들어온 정보와 나간 정보를 담은 테이블을 각각 I, O라고 할 때 O.DATETIME - I.DATETIME이 큰 순서대로 2개를 출력하면 된다.

  이때 보호소에서 나가지 않은 동물의 정보는 필요하지 않으므로 inner join을 했다.

 

5. DATETIME에서 DATE로 형 변환

  동물 보호소에 들어온 모든 동물의 아이디, 이름 들어온 날짜를 아이디 순으로 출력하는 문제이다.

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

  DATETIME 형식을 DATE 형식으로 바꾸기 위해 DATE_FORMAT( )를 사용했다.

* 날짜 컬럼을 DATE(DATETIME)으로 해도 DATETIME 형식으로 나오는데 그 이유는 모르겠다.

반응형

+ Recent posts