프로그래머스 SQL 고득점 Kit - String, Date
1. 루시와 엘라 찾기
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/59046
문제 조건
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
문제 조건
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
문제 조건
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
문제 조건
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
문제 조건
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 : 초
. 중간에 있는 - 는 그저 표시를 위함일 뿐 없어도 무방하다.
'알고리즘 > 프로그래머스 - SQL 고득점 KIT' 카테고리의 다른 글
프로그래머스 SQL 고득점 Kit - JOIN (0) | 2021.10.14 |
---|---|
프로그래머스 SQL 고득점 Kit - IS NULL (0) | 2021.10.13 |
프로그래머스 SQL 고득점 Kit - GROUP BY (0) | 2021.10.12 |
프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN (0) | 2021.10.11 |
프로그래머스 SQL 고득점 Kit - SELECT (0) | 2021.10.10 |
댓글