mysql join관련 질문드립니다 좀 도와주세요 ㅠㅠ
조회수 1072회
안녕하세요 서비스기획자로 일하고있으며 mysql을 공부하고있는 21살 청년입니다.
다름이 아니라 mysql 과제를 하는 도중에 정말 막혀서 답이 안나와서 질문을 드리게 됬습니다 ㅠㅠ
제가 진행하고있는 과제구요 이 테이블을 만들어야합니다.
select A.order_idx, A.amount_before_discount, (A.amount_before_discount + A.delivery_cost - A.totail_price) as discount_amount, A.delivery_cost, A.total_price from(select order_idx, (m.price * od.amount)as amount_before_discount, om.delivery_fee, om.total_price from order_detail as od left join menu as m on od.menu_idx = m.idx left join order_meta as om on od.idx = om.idx)A
제가 지금까지 작성한 코드고 계속 1054오류가 떠서 정말 찾아봐도 모르겠어서 질문드립니다.
mysql을 시작한지 1주일밖에 안되서 이런 질문 드려서 죄송합니다.
좀 쉽게 이해하실 수 있도록 더미데이터를 엑셀시트로 만들어봤습니다.
2 답변
-
그리고 위의 답변은
에서 다음 지문을 넣고 execute 해, 오류가 나지 않은 걸 확인하고 작성한 답변입니다.
BEGIN TRANSACTION; create table order_detail( idx integer primary key, order_idx integer, menu_idx integer, amount integer ); create table menu( idx integer primary key, price integer ); create table order_meta( idx integer primary key, order_idx integer, delivery_fee integer, total_price integer ); insert into order_detail values(1,1,13,1); insert into order_detail values(2,1,15,2); insert into order_detail values(3,2,13,2); insert into menu values(13,10000); insert into menu values(14,12000); insert into menu values(15,11000); insert into order_meta values(1, 1, 3000, 10000); insert into order_meta values(2, 2, 1000, 20000); COMMIT; select order_detail.order_idx, sum(amount*price) as amount_before_discount, sum(amount*price) + delivery_fee - total_price as discount_amount, delivery_fee, total_price from order_meta, order_detail join menu on order_detail.menu_idx = menu.idx where order_meta.order_idx = order_detail.order_idx group by order_detail.order_idx, delivery_fee, total_price;
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
- order_idx: order_detail 테이블의 order.idx
- amount_before_discount(할인 전 총액): order_detail, menu 테이블을 보고 적당히 곱해야함.
- discount_amount(할인 금액):
같은 테이블의 amount_before_discount
+order_meta 테이블의 delivery_fee
-order_meta 테이블의 total_price
- delivery_fee(배달비): order_meta 테이블의 delivery_fee
- total_price(결제금액): order_meta 테이블의 total_price
라고 생각하고 답변하겠습니다.
1. order_idx별 amount_before_discount 구하기
order_idx에 따른 amount_before_discount를 구하는 게 가장 어려워보이니, 이것 먼저 해결하고 가겠습니다.
이 값을 구하려면
- order_detail과 menu 테이블을 menu_idx를 기준(on)으로 join 하고
- 이를 order_idx로 group_by 해
- order_idx와 sum(amount*price)을 해주면 될 것 같네요.
select order_idx, sum(amount*price) as amount_before_discount from order_detail join menu on order_detail.menu_idx = menu.idx group by order_idx
2. + delivery fee 구하기
delivery fee는 위 쿼리에 order_meta 테이블을 추가해주면 됩니다.
select order_detail.order_idx, sum(amount*price) as amount_before_discount, delivery_fee from order_meta, # 추가 order_detail join menu on order_detail.menu_idx = menu.idx where order_meta.order_idx = order_detail.order_idx group by order_detail.order_idx, delivery_fee # 추가
3. + total_price 구하기
select order_detail.order_idx, sum(amount*price) as amount_before_discount, delivery_fee, total_price from order_meta, order_detail join menu on order_detail.menu_idx = menu.idx where order_meta.order_idx = order_detail.order_idx group by order_detail.order_idx, delivery_fee, total_price # 추가
4. + discount_amount 구하기
select order_detail.order_idx, sum(amount*price) as amount_before_discount, sum(amount*price) + delivery_fee - total_price as discount_amount, #추가 delivery_fee, total_price from order_meta, order_detail join menu on order_detail.menu_idx = menu.idx where order_meta.order_idx = order_detail.order_idx group by order_detail.order_idx, delivery_fee, total_price
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력