주문 수량에 따른 메뉴별 순환 Order 처리 0 5 1,176

by 마늘장아찌 [SQL Query] [2018.12.07 10:05:38]


기본 Base가 되는 SQL은 아래와 같은데요...

우선순위는 NO

메뉴는 총 4가지

수량은 각각 1개 입니다.

주문 수량을 받으면 우선순위별로 데이터를 만드는데 우선순위가 넘어가면 다시 1부터 ...

예를 들어 3개면 (햄버거 1, 피자 1, 스파게티 1)

그런데 10개가 들어오면 우선순위별로 처리 되어서 (햄버거 3, 피자 3, 스파 2, 치킨 2)로 계산해야 합니다.

저는 보통 reculsive난 connect by로 생각은 해봤는데 산술적으로도 가능할거 같기도 하구요...

간단하게 계산할수 있을까요? 도움 바랍니다....

WITH t AS
(SELECT 1 NO, 'HBG' menu_cd, 1 qty FROM dual UNION ALL
 SELECT 2, 'PZZ' menu_cd, 1 qty FROM dual UNION ALL
 SELECT 3, 'SPG' menu_cd, 1 qty FROM dual UNION ALL
 SELECT 4, 'CHK' menu_cd, 1 qty FROM dual)
SELECT *
FROM t

WHERE 주문수량 = :1 

by 마농 [2018.12.07 10:29:23]

메뉴 개수 4개 와 수량 1개 는 고정값 인가요?
고정값이라면 계산이 좀 더 수월할 것이고
가변값이라면 계산이 좀 더 복잡해 지겠죠?


by 마늘장아찌 [2018.12.07 11:08:42]

메뉴나 수량은 추가 될수는 있는데요... (가능성만... 희박합니다)

일단은 고정값으로 부탁드려요...


by 마농 [2018.12.07 11:19:08]
WITH t AS
(
SELECT 1 no, 'HBG' menu_cd, 1 qty FROM dual
UNION ALL SELECT 2, 'PZZ', 1 FROM dual
UNION ALL SELECT 3, 'SPG', 1 FROM dual
UNION ALL SELECT 4, 'CHK', 1 FROM dual
)
SELECT no, menu_cd, qty
     , v
     , FLOOR(v / 4) + CASE WHEN MOD(v, 4) >= no THEN 1 ELSE 0 END cnt
  FROM t
     , (SELECT 10 v FROM dual)
;

 


by 마늘장아찌 [2018.12.07 14:41:44]

감사합니다.

하다보니까 궁금한게 하나 더 생겼는데요...

우선순위 까지의 누적 수량을 좀 구했으면 합니다.

즉, 아래 같은 경우 다음과 같이 수량 계산이 되려면 ... 생각보다 쉽지 않네요...

NO MENU_CD QTY 단계별 누적 수량
1 HBG 1 1
2 PZZ 2 3
3 SPG 2 5
4 CHK 3 8

 

WITH t AS
(
SELECT 1 no, 'HBG' menu_cd, 1 qty FROM dual
UNION ALL SELECT 2, 'PZZ', 2 FROM dual
UNION ALL SELECT 3, 'SPG', 2 FROM dual
UNION ALL SELECT 4, 'CHK', 3 FROM dual
)
SELECT no, menu_cd, qty
FROM t

 


by 마농 [2018.12.07 15:45:44]
SELECT no, menu_cd, qty
     , SUM(qty) OVER(ORDER BY no) qty_sum
  FROM t
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입