인원분배 쿼리 질문입니다 0 6 1,131

by 돼지뚱뙝이 [SQL Query] [2018.07.12 11:03:51]


select '8' A
      ,'5' B
  from dual

위같이 A그룹 8명 B그룹 5명이 있다면

A그룹은 3명씩 B그룹은 2명씩 로우로 조회하고싶습니다.

마지막행은 최종인원숫자가나와야합니다. 예를들어

1. A 3

2. A 3

3. A 2

4. B 2

5. B 2

6. B 1

같이 나와야합니다. 도와주세요 쿼리 고수님들

 

by 마농 [2018.07.12 11:09:05]

왜? A 는 3 명, B 는 2 명 인지? 설명이 없네요.
 - A 는 3 명, B 는 2 명이 그냥 무조건 고정인건지?
 - 아니면 인원수에 따라 다르게 설정될 수 있는건지?


by 돼지뚱뙝이 [2018.07.12 11:18:57]

아 고정이에요. 무조건 A그룹은 3명 B그룹은 2명이요 


by 마농 [2018.07.12 13:22:41]
WITH t AS
(
SELECT 'A' grp, 8 tot, 3 cnt FROM dual
UNION ALL SELECT 'B', 5, 2 FROM dual
)
SELECT grp
     , LEAST(tot, cnt * lv) - cnt * (lv - 1) cnt
  FROM t
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
 WHERE lv <= CEIL(tot / cnt)
 ORDER BY grp, lv
;

 


by 돼지뚱뙝이 [2018.07.12 13:44:49]

정말감사합니다. 어떻케 짜야할지 막막해서 몇시간동안 이것저것 찾아보왔거든요.. 정말감사해요.


by 우리집아찌 [2018.07.12 13:28:42]
WITH T AS (
SELECT 8 COL1 , 'A' COL2 FROM DUAL UNION ALL
SELECT 5 , 'B' FROM DUAL 
) , COPY_T AS (
SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 10
)

SELECT COL2 
     , COUNT(*) CNT
  FROM (SELECT ROWNUM RN
             , COL2 
             , NTILE(3) OVER(PARTITION BY COL2 ORDER BY ROWNUM ) GRP
          FROM T
             , COPY_T
         WHERE LV <= COL1
        )
 GROUP BY COL2 , GRP
 ORDER BY COL2 , MAX(RN) 

 


by 돼지뚱뙝이 [2018.07.12 13:45:52]

감사합니다 우리집아찌님 마농님이 먼저 올려주셔서 답변은 마농님걸로 채택했서요...  ㅠㅠ 

아찌님이 알려주신 쿼리도 저에게꿀물같은 쿼리에요

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