카테고리 없음

데베 팀플 - SQL

마크투비 2022. 6. 6. 09:45

1. 요일별, 주문방법별 주문 건수와 매출 - 코로나로 인한 배달 증가를 분석하기 위한 구문

 

SELECT SUBSTR(O.order_time, 1, 8) 날짜, O.eat_option 주문방법, COUNT(DISTINCT O.order_no) 주문건수, SUM(OM.amount * M.price) 매출

FROM Orders O, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

and OM.menu = M.menu_no

GROUP BY SUBSTR(O.order_time, 1, 8), O.eat_option;

 

💥 결과가 다르게 나옴 - 날짜가 문제인듯

 

✅ 해결

SELECT SUBSTR(O.order_time, 1, 10) 날짜, O.eat_option 주문방법, COUNT(DISTINCT O.order_no) 주문건수, SUM(OM.amount * M.price) 매출

FROM Orders O, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

and OM.menu = M.menu_no

GROUP BY SUBSTR(O.order_time, 1, 10), O.eat_option;

 

2. 고객 유형별(성별, 나이), 메뉴별 주문 건수와 매출

 

SELECT U.sex 성별, U.age 나이, M.name 메뉴, SUM(OM.amount) 주문건수, SUM(OM.amount * M.price) 매출

FROM Customer U, Orders O, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

    and OM.menu = M.menu_no

    and U.phone = O.customer

GROUP BY U.sex, U.age, M.name;

 

 

3. 단골 고객 관리 - 자주 방문한 손님 10명의 주문 내역 조회

 

SELECT O.customer 회원번호, C.name 코너이름, M.name 메뉴이름, O.eat_option 주문방법, O.pay_option 결제방법, O.order_time 주문시간

FROM (

SELECT O.customer RES

FROM Orders O

WHERE ROWNUM <= 10

GROUP BY O.customer

ORDER BY COUNT(O.customer) DESC

) A, Orders O, Corner C, Menu M, Order_Menu OM

WHERE O.customer = A.RES

and O.order_no = OM.orders 

    and OM.menu = M.menu_no

    and M.corner = C.corner_no

GROUP BY O.customer, C.name, M.name, O.eat_option, O.pay_option, O.order_time;

 

💥 ERROR - ROWNUM 사용 방법이 다른 듯


💥 시행착오

https://baessi.tistory.com/104

 

[MySQL] ROWNUM 으로 번호 매기기, 역순 포함

Mysql을 쓰다 보면 Oracle처럼 rownum을 써야 하는 경우가 생깁니다. 따라서 오늘은 Mysql에서 ROWNUM의 사용 방법에 대해 소개해드리고자 합니다. 자 우선 간단한 TEST 테이블의 데이터입니다. REG_DATE(등

baessi.tistory.com

https://developer-jjun.tistory.com/23

 

[MySQL] ROWNUM을 사용하여 번호매기기

MySQL에서 Oracle처럼 ROWNUM 사용법 SET구문을 사용하여 ROWNUM 값을 초기화 후 조회 SET @rownum:=0; SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE절에서 초기화 SELECT @rownum:=@rownum+1, b.*..

developer-jjun.tistory.com

 

SET @ROWNUM:=0;

 

SELECT @ROWNUM:=@ROWNUM+1, O.customer 회원번호, C.name 코너이름, M.name 메뉴이름, O.eat_option 주문방법, O.pay_option 결제방법, O.order_time 주문시간

FROM (

SELECT O.customer RES

FROM Orders O

WHERE @ROWNUM <= 10

GROUP BY O.customer

ORDER BY COUNT(O.customer) DESC

) A, Orders O, Corner C, Menu M, Order_Menu OM

WHERE O.customer = A.RES

and O.order_no = OM.orders 

    and OM.menu = M.menu_no

    and M.corner = C.corner_no

GROUP BY O.customer, C.name, M.name, O.eat_option, O.pay_option, O.order_time;

 

 

✅ 해결

https://m.blog.naver.com/jwlee0208/10096564579

 

[sql] 상위 n개 데이터 출력하기

----------------------------------------------------------------------------------------- 출처 : htt...

blog.naver.com

SELECT O.customer 회원번호, C.name 코너이름, M.name 메뉴이름, O.eat_option 주문방법, O.pay_option 결제방법, O.order_time 주문시간

FROM (

SELECT O.customer RES

FROM Orders O

GROUP BY O.customer

ORDER BY COUNT(O.customer) DESC

LIMIT 10

) A, Orders O, Corner C, Menu M, Order_Menu OM

WHERE O.customer = A.RES

and O.order_no = OM.orders 

    and OM.menu = M.menu_no

    and M.corner = C.corner_no

GROUP BY O.customer, C.name, M.name, O.eat_option, O.pay_option, O.order_time;

 

4. 요일별, 코너별 주문 건수와 매출

 

SELECT SUBSTR(O.order_time, 1, 8) 날짜, C.name 코너이름, COUNT(DISTINCT O.order_no) 주문건수, SUM(OM.amount * M.price) 매출

FROM Orders O, Corner C, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

and OM.menu = M.menu_no

and M.corner = C.corner_no

GROUP BY SUBSTR(O.order_time, 1, 8), C.name;

 

💥 결과가 다르게 나옴 - 날짜가 문제인듯

 

✅ 해결

SELECT SUBSTR(O.order_time, 1, 10) 날짜, C.name 코너이름, COUNT(DISTINCT O.order_no) 주문건수, SUM(OM.amount * M.price) 매출
FROM Orders O, Corner C, Order_Menu OM, Menu M
WHERE O.order_no = OM.orders 
and OM.menu = M.menu_no
and M.corner = C.corner_no
GROUP BY SUBSTR(O.order_time, 1, 10), C.name;

 

5. 코너별, 주문방법별 주문 건수와 매출

 

SELECT C.name 코너이름, O.eat_option 주문방법, COUNT(DISTINCT O.order_no) 주문건수, SUM(OM.amount * M.price) 매출

FROM Orders O, Corner C, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

    and OM.menu = M.menu_no

and M.corner = C.corner_no

GROUP BY C.name, O.eat_option;

 

 

6. 메뉴별 매출

 

SELECT M.name 메뉴이름, SUM(OM.amount) 주문건수, SUM(OM.amount * M.price) 매출

FROM Orders O, Order_Menu OM, Menu M

WHERE O.order_no = OM.orders 

    and OM.menu = M.menu_no

GROUP BY M.name;