Q. FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요.
이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
(정답)
select category, price MAX_PRICE, product_name
from food_product
where price in (select max(price)
from food_product
group by category)
and category in ('과자', '국', '김치', '식용유')
order by price desc
where 절 서브쿼리에 카테고리 별 최댓값을 찾고 and로 필요한 카테고리만 선별한다.

(오답)
SELECT CATEGORY, max(price) as MAX_PRICE, PRODUCT_NAME
from food_product
where category in ('과자','국','김치','식용유')
group by category
order by price desc;


Q. FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요.
이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.
(정답)
SELECT a.product_id, a.product_name, a.price*sum(b.amount) as TOTAL_SALES
from food_product a inner join food_order b
on a.product_id=b.product_id
where date_format(produce_date, '%m') = '05'
group by 1
order by 3 desc, 1
거의 한번에 맞출뻔했던 문제
상품별 총 매출액을 구해야 하니 price * sum(amount)를 해야하는데 sum을 빼먹어서 계속 오답이 나왔었다.
만약 테이블에 2022년 데이터 뿐만 아니라 다른 연도도 있었으면 오답이 될 수 있으니,
where b.produce_date like '2022-05-%' 형식으로 푸는 것도 알아둬야 겠다고 생각했다.
Q. ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요.
결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
재구매한 회원들을 어떻게 구분해야하는지 도저히 모르겠어서 다른 사람들은 답을 어떻게 썼는지 찾아봤다.
(정답)
SELECT user_id, product_id
from online_sale
group by 1, 2
having count(product_id) >= 2
order by 1, 2 desc
group by는 동일한 상품을 재구매한 데이터를 조회해야 하므로 user_id 와 product_id를 그룹화한다.
그리고 having 으로 주문한 product_id 개수가 1개 보다 많은 조건으로 한다.