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 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    그리고 위의 답변은

    튜토리얼 포인트

    에서 다음 지문을 넣고 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;
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변이 늦어서 정말 죄송합니다!! 늦어도 너무 늦었지만 댓글을 달아야할 것 같아서 이렇게 댓글을 달았습니다. 조건상 2018.4.26 17:58
    • 해결은 했지만 쿼리를 돌리는 속도가 느려서 정리가 필요했는데 훨씬 간결해지고 좋아진 것 같습니다!! 조건상 2018.4.26 17:59
    • 달아주신 쿼리 보면서 정리도하고 이해도 했습니다!! 정말 감사드립니다! 조건상 2018.4.26 17:59
    • 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를 구하는 게 가장 어려워보이니, 이것 먼저 해결하고 가겠습니다.

    이 값을 구하려면

    1. order_detail과 menu 테이블을 menu_idx를 기준(on)으로 join 하고
    2. 이를 order_idx로 group_by 해
    3. 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
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)