소피it블로그

[SQL] 프로그래머스 SQL 고득점 Kit -String, Date (MySQL) 본문

CS/데이터베이스

[SQL] 프로그래머스 SQL 고득점 Kit -String, Date (MySQL)

sophie_l 2022. 11. 4. 23:59

https://school.programmers.co.kr/learn/courses/30/parts/17047

 

프로그래머스

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

programmers.co.kr

1. (우선 생략)

 

JOIN 두 개는 약간 자신이 없어서 우선 생략하기로..

 

2. 조건별로 분류하여 주문상태 출력하기

SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d'),
(CASE
WHEN OUT_DATE <= 20220501 THEN '출고완료'
WHEN OUT_DATE > 20220501 THEN '출고대기'
ELSE '출고미정'
END) 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID

5번을 푼 이후에 풀었기 때문에, CASE문은 두 번째로 써보는 것이었다. 크게 어렵지는 않았는데 DATE를 비교할때 20220501과 같이 그냥 숫자로 써주면 된다는 것을 처음 알았다.

 

3. 루시와 엘라 찾기

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

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

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

동물 타입 빼먹지 말자.

 

5. 중성화 여부 파악하기

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

CASE문을 처음 써봤다.

CASE WHEN THEN ELSE END를 잘 지켜서 써주자. 그리고 SELECT문에 바로 CASE문이 들어갈 수도 있다는 점도 이 문제를 통해 알았다.

 

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

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

7. 카테고리 별 상품 개수 구하기

SELECT LEFT(PRODUCT_CODE, 2) CATEGORY, COUNT(PRODUCT_ID) PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY

LEFT(PRODUCT_CODE, 2)와 같은 쿼리는 처음 써본다.

왼쪽에서 2글자만 가져오고자 할 때 쓰는 듯하다.

COUNT 기준이 PRODUCT_ID인 것도 잠시 헷갈렸다. CATEGORY로 GROUP BY 해줬으므로 카운트는 product id를 해주면 해당 카테고리 별 상품의 개수를 구할 수 있다.

 

8. DATETIME에서 DATE로 형 변환

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