소피it블로그
[SQL] 프로그래머스 SQL 고득점 Kit -String, Date (MySQL) 본문
https://school.programmers.co.kr/learn/courses/30/parts/17047
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
'CS > 데이터베이스' 카테고리의 다른 글
[DB] 인덱스(Index) (0) | 2022.11.13 |
---|---|
[DB] 데이터베이스 기본 (0) | 2022.11.13 |
[SQL] 프로그래머스 SQL 고득점 Kit -JOIN (MySQL) (0) | 2022.11.04 |
[SQL] 프로그래머스 SQL 고득점 Kit - SELECT (MySQL) (0) | 2022.11.04 |
[SQL] 프로그래머스 SQL 고득점 Kit - IS NULL (MySQL) (0) | 2022.11.04 |