MySQL - 프로그래머스 레벨 : 2(5) - ORDER BY '정답률'

먹보·2022년 12월 15일
0
post-thumbnail

1. 가격대 별 상품 개수 구하기

테이블 설명 : 다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.

문제 설명 : PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

SELECT
CASE
WHEN PRICE BETWEEN 0 AND 10000 THEN '0'
WHEN PRICE BETWEEN 10000 AND 20000 THEN '10000'
WHEN PRICE BETWEEN 20000 AND 30000 THEN '20000'
WHEN PRICE BETWEEN 30000 AND 40000 THEN '30000'
WHEN PRICE BETWEEN 40000 AND 50000 THEN '40000'
WHEN PRICE BETWEEN 50000 AND 60000 THEN '50000'
WHEN PRICE BETWEEN 60000 AND 70000 THEN '60000'
WHEN PRICE BETWEEN 70000 AND 80000 THEN '70000'
ELSE '80000'
END AS PRICE_GROUP,
COUNT(PRODUCT_CODE) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC
---
SELECT
    floor(price/10000)*10000 as price_group
    , count(product_id)
from product
group by floor(price/10000)
order by floor(price/10000) asc

🗒️코멘트 : 처음에는 막연하게 노가다성 문제라고 생각했지만 생각해보니 내가 데이터 값을 변경할 수 있으니 수학적으로 접근해 floor를 적용해서 RANGE를 만들어 적용시켰다.

2. 성분으로 구분한 아이스크림 총 주문량

테이블 설명 : 다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER 는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다.

ICECREAM_INFO 테이블 구조는 다음과 같으며, FLAVOR, INGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림의 성분 타입을 나타냅니다. INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고, 아이스크림의 주 성분이 과일이면 fruit_based라고 입력됩니다. ICECREAM_INFO의 기본 키는 FLAVOR입니다. ICECREAM_INFO테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키입니다.

문제 설명 : 상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

SELECT
II.INGREDIENT_TYPE,
SUM(FH.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF FH
LEFT JOIN ICECREAM_INFO II ON FH.FLAVOR = II.FLAVOR
GROUP BY II.INGREDIENT_TYPE

🗒️코멘트 : NULL

3. 재구매가 일어난 상품과 회원 리스트 구하기

테이블 설명 : 다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

문제 설명 : ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

SELECT
USER_ID,
PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(ONLINE_SALE_ID) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC

🗒️코멘트 : HAVING COUNT(ONLINE_SALE_ID) > 1을 생각하는데 이렇게 오래 걸릴 줄이야...GROUP까지 생각한 뒤로 특정 조건을 더 넣어주면 될 것 같았는데. 직접적으로 쓰이지 않는 데이터의 중요성을 다시 한 번 깨닫는다.

4. 조건에 맞는 도서와 저자 리스트 출력하기

테이블 설명 : 다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 저자 정보(AUTHOR) 테이블입니다.

BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

문제 설명 : '경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

SELECT
B.BOOK_ID,
A.AUTHOR_NAME,
DATE_FORMAT(B.PUBLISHED_DATE, "%Y-%m-%d") AS PUBLISHED_DATE
FROM BOOK B
RIGHT JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY PUBLISHED_DATE ASC

🗒️코멘트 : NULL

📌총평 :

프로그래머스 MySQL 레벨 2 끝!!!!!!!!!!!!!!!
아직까지는 크게 어려운 건 없었던 것 같다...
이제 레벨 3 으로 가즈아~

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글