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

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

1. 5월 식품들의 총매출 조회하기

테이블 설명 : 다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문량, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

문제 :FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.

SELECT
P.PRODUCT_ID,
P.PRODUCT_NAME,
(SUM(O.AMOUNT)*P.PRICE) AS TOTAL_SALES
FROM FOOD_PRODUCT P
INNER JOIN FOOD_ORDER O ON P.PRODUCT_ID = O.PRODUCT_ID
WHERE MONTH(O.PRODUCE_DATE) = 5
GROUP BY PRODUCT_ID
ORDER BY TOTAL_SALES DESC, P.PRODUCT_ID ASC

🗒️코멘트 : NULL

2. 우유와 요거트가 담긴 장바구니

테이블 설명 : CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가격을 나타냅니다.

문제 : 데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

SELECT DISTINCT
O.CART_ID
FROM CART_PRODUCTS O 
LEFT JOIN CART_PRODUCTS N ON O.CART_ID = N.CART_ID
WHERE O.NAME = "Milk" AND N.NAME = "Yogurt" 
ORDER BY O.CART_ID

🗒️코멘트 : 처음에 너무 어렵게 생각만 했다. 머리가 안돌아가나보다.

3. 년, 월, 성별 별 상품 구매 회원 수 구하기

테이블 설명 : 다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블과 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다.USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.

GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.

ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

문제 : USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

SELECT
DIST.YEAR,
DIST.MONTH,
U.GENDER,
COUNT(DIST.USER_ID)
FROM (SELECT DISTINCT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
USER_ID
FROM ONLINE_SALE) AS DIST
LEFT JOIN USER_INFO U ON U.USER_ID = DIST.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY MONTH, U.GENDER
ORDER BY YEAR ASC, MONTH ASC, GENDER ASC

🗒️코멘트 : 다시 한 번 강조하지만, MYSQL에서 문제 푸는 방법 중 가장 좋은 것은 하나 하나 해보는 것!

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

0개의 댓글