본문 바로가기
알고리즘, 문제해결/알고리즘, 자료구조

[SQL] String, Date

by 카펀 2021. 3. 11.

프로그래머스 링크: programmers.co.kr/learn/courses/30/parts/17047

 

프로그래머스

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

programmers.co.kr

코딩 테스트의 SQL 문제를 대비하기 위해 공부하며 정리한 글입니다.

 

1. 루시와 엘라 찾기

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

ANIMAL_INS 테이블 중, 동물 이름이 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')
ORDER BY ANIMAL_ID

 

WHERE NAME = 'Lucy' or NAME = 'Ella' or ... 와 같은 식으로 써도 되지만 위와 같이 작성하는 것이 더 편합니다.

 

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

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

ANIMAL_INS 테이블 중, 동물 이름에 el이 들어가는 개의 아이디와 이름을 조회하여, 이름 순으로 정렬하여 출력하는 문제. 이 때 이름의 대소문자는 구분하지 않습니다.

 

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

 

LIKE '%문자열%' 을 이용하여 푸는 문제였습니다.

 

3. 중성화 여부 파악하기

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

ANIMAL_INS 테이블 중, 중성화가 되었는지 여부를 파악하여, 동물의 아이디와 이름, 중성화 여부를 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
ORDER BY ANIMAL_ID

 

이 문제는 문자열 쪽에서 헷갈렸다기보다는, CASE를 활용하는 경우에 대한 예시라고 봐도 좋을 것 같습니다.

CASE 문을 열고 END로 닫습니다. 이 사이에서 WHEN을 통해 조건을 명시하고, 맞을 경우 THEN, 아닐 경우 ELSE를 통해 원하는 내용을 출력합니다.

1번 문제처럼 in ('문자열1', '문자열2',...)는 LIKE에서는 사용ㅇ할 수 없는 것 같습니다.

 

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

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

ANIMAL_INS와 ANIMAL_OUTS 테이블에서, 보호 기간이 가장 긴 두 마리의 동물의 아이디와 이름을, 보호 기간이 긴 순으로 정렬하여 출력하는 문제.

 

SELECT a.ANIMAL_ID, a.NAME
FROM ANIMAL_INS a LEFT JOIN ANIMAL_OUTS b on a.ANIMAL_ID = b.ANIMAL_ID
ORDER BY b.DATETIME - a.DATETIME DESC
LIMIT 2

 

JOIN을 함께 이용하는 문제입니다.

두 테이블 ANIMAL_INS와 ANIMAL_OUTS를 JOIN하고, 나간 시간 - 들어온 시간 을 내림차순으로 정렬하여 2개만 출력하도록 했습니다.

 

5. DATETIME에서 DATE로 변환

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

ANIMAL_INS 테이블로부터, 각 동물의 아이디와 이름, 들어온 날짜를 조회하여 아이디 순으로 정렬한 후 출력하는 문제. 들어온 날짜는 년-월-일 형식을 따릅니다.

 

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

 

DATE_FORMAT을 이용합니다. 이 때 사용되는 형식에는 '%Y' (4자리 연도), '%y' (2자리 연도), '%m' (월), '%d' (일), '%H' (24시간), '%h' (12시간) 등이 있습니다.

'알고리즘, 문제해결 > 알고리즘, 자료구조' 카테고리의 다른 글

세그먼트 트리  (0) 2021.09.25
C++의 auto에 대해  (0) 2021.08.31
[SQL] JOIN  (0) 2021.03.11
[SQL] is Null  (0) 2021.03.11
[SQL] Group By  (0) 2021.03.10

댓글