본문 바로가기
알고리즘/프로그래머스 - SQL 고득점 KIT

프로그래머스 SQL 고득점 Kit - String, Date

by 호롤롤로루야 2021. 10. 15.

프로그래머스 SQL 고득점 Kit - String, Date

1. 루시와 엘라 찾기

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59046

 

코딩테스트 연습 - 루시와 엘라 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 조건

1. 동물 보호소에 들어온 동물 중 이름이 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;

풀이

1. ANIMAL_INS에 있는 행 중 NAME이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty 인 동물의 정보를 찾는다.

   . WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

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

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59047

 

코딩테스트 연습 - 이름에 el이 들어가는 동물 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 조건

1. 동물 보호소에 들어온 동물 이름 , 이름에 "EL" 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

2. 이때 결과는 이름 순으로 조회해주세요. , 이름의 대소문자는 구분하지 않습니다.

쿼리

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

풀이

1. LIKE

   . %는 해당 위치에 어떤 값이 들어오던 상관하지 않겠다는 뜻이다.

      . EL% : EL로 시작한다.

      . %EL : EL로 끝난다.

      . %EL% : EL을 포함한다.

   . _ 는 자릿수를 정해준다.

      . _ _ _EL : EL로 끝나는 단어 중 앞에 3글자가 있는 단어 ex) LEVEL

 

3. 중성화 여부 파악하기

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59409

 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 조건

1. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다.

2. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요.

3. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

쿼리

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;

풀이

1. 조건에 따라 O와 X를 사용해야 하므로 CASE~ WHEN~ THEN~ ELSE~ END 를 사용해야 한다.

2. 알아보기 쉽게 들여쓰기를 적용했다

3. CASE~ WHEN~ THEN~ ELSE~ END의 문법은 다음과 같다.

   . CASE : CASE문 시작

   . WHEN : 조건 입력

   . THEN : 조건을 만족하는 경우

   . ELSE : 조건을 만족하지 않는 경우 (생략 가능하며 생략될 경우 NULL 표시)

   . END : CASE 문의 끝

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

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59411

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 조건

1. 입양을 동물 , 보호 기간이 가장 길었던 동물 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

2. 이때 결과는 보호 기간이 순으로 조회해야 합니다.

쿼리

SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_OUTS A
INNER JOIN ANIMAL_INS B ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY A.DATETIME - B.DATETIME DESC
LIMIT 2;

풀이

1. 입양을 간 동물이라면 ANIMAL_INS, ANIMAL_OUTS에 모두 정보가 있을 것이다. (INNER_JOIN)

2. 보호 기간을 구하기 위해 A.DATETIME - B.DATETIME 을 수행했다.

5. DATETIME에서 DATE로 형 변환

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/59414

 

코딩테스트 연습 - DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 조건

1. ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요.

2. 이때 결과는 아이디 순으로 조회해야 합니다.

쿼리

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

풀이

1. 출력 예시에서 DATETIME이 yyyy-mm-dd의 형식으로 변경되었다.

2. DATEFORMAT(원래 DATETIME, '바꿀 형식') 을 사용한다.

   . %Y : 4자리 년도 / %y : 2자리 년도

   . %M : 월 (영어) / %m : 월 (숫자)

   . %D : 일 (영어) / %d : 일 (숫자)

   . %H : 24 시간제/ %h : 12 시간제 / %I(대문자 i) : 12시간제

   . %i : 분 / %s : 초

   . 중간에 있는 - 는 그저 표시를 위함일 뿐 없어도 무방하다.

 

댓글