SQL 연습3

jegw·2023년 8월 8일
0

TIL

목록 보기
57/77
post-custom-banner
  1. ID가 3번인 고객의 이름과, 이메일 그리고 즐겨찾기한 메뉴 이름을 출력하는 목록의 2페이지 내용을 모두 출력하시오(단, 페이징 처리를 해야하고 1페이지당 10개의 목록을 가져온다고 가정합니다, 또한 메뉴이름을 오름차순으로 정렬하세요)
SELECT c.name, c.email, m.name FROM customer c
inner join menu_like ml on c.id = ml.customer_id
inner  join menu m on ml.menu_id = m.id
where c.id = 3
order by m.name
limit 10 offset 10;

  1. 주문자의 주소가 “서울”로 시작하고 주문 금액이 20,000원 이상이고 40,000원 이하인 주문의 주문ID, 주문자명, 총 주문 금액을 출력하세요
select o.id, o.orderer_name, sum(om.price * om.count) as 총주문금액 from `order` o
inner join order_menu om on o.id = om.order_id
where shipping_address like '서울%'
group by o.id
having 총주문금액 between 20000 and 40000;

  1. 음식 카테고리가 (피자, 양식, 간편식)에 속하고 카테고리의 이미지가 존재하는 매장의 매장이름과 메뉴이름을 출력하세요
1) 메뉴 기준
select m.name, s.name  from menu m
inner join store s on m.store_id = s.id
inner join food_category fc on s.food_category_id = fc.id
where fc.name in ('피자', '양식', '간편식') and fc.image_url is not null

select s.name, m. from store sinner join menu m on s.id = m.store_idselect from food_category

2) 상점 기준 (어제 내가 시도한 방식)
select m.name, s.name from store s
inner join food_category fc on s.food_category_id = fc.id
inner join menu m on s.id = m.store_id
where fc.name in ('피자', '양식', '간편식')

둘 다 잘 된다. 어제는 group by를 하려고 해서 메뉴가 다 안떴던것 같다.

왜 상점별로 여러 개의 메뉴가 있는데 하나만 뜰까 이렇게 생각했는데.

  1. 주문의 ID, 총 주문금액, 성과분류 를 출력하세요 (단, 성과분류는 다음과 같은 로직으로 구분합니다.)

1) 총 주문금액이 50000 미만이면 “쪽박

2) 총 주문금액이 100,000원 미만이면 “중박

3) 총 주문금액이 100,000원 이상이면 “대박

select om.order_id, *sum*(om.price * om.count) as 총주문금액,
       CASE           
		  when *sum*(om.price * om.count) < 50000 then '쪽박'
          when *sum*(om.price * om.count) < 100000 then '중박'
          else '대박'       
end as 성과분류
from order_menu omgroup by order_id;

post-custom-banner

0개의 댓글