범위 조회(?) 쿼리 질문입니다.. 0 6 1,704

by DONKEY [SQL Query] [2017.03.09 13:36:36]


안녕하세요 구루비 회원님들

오랜만에 뵙습니다! 오늘도 업무 중 도저히 어떻게해야될지 갈피를 못잡아 질문드리러 왔습니다...

표로 간단하게 말씀드리겠습니다..

연령 총원 0 1 2 3 4 5 6 7 8 9 10~ 15~ 20~

20세이하

00 0 0 0 0 0 0 0 0 0 0 0 0 0
21~25 124 100 24 0 0 0 0 0 0 0 0 0 0 0
26~30 422                          
31~35 21                          
36~40 545                          
46~50 12                          
51~55 12                          
56~60 12                          
(총계) ...                          

위와같이 이런형식의 데이터를 조회 해야되는데 근속 년수별 해당하는 기간의 인원수를 조회 해야되는데

어떻게 row로 범위를 뽑아 카운트를 해야되는지 모르겠습니다...ㅜ 설명도 좀 이상한거 같은데..

코멘트 부탁드리겠습니다!

by 마농 [2017.03.09 14:08:00]
WITH code_t AS
(
SELECT 1 lv, 0 s, 20 e,'20세이하' gb FROM dual
UNION ALL SELECT 2, 21, 25, '21~25'    FROM dual
UNION ALL SELECT 3, 26, 30, '26~30'    FROM dual
UNION ALL SELECT 4, 31, 35, '31~35'    FROM dual
UNION ALL SELECT 5, 36, 40, '36~40'    FROM dual
UNION ALL SELECT 6, 46, 50, '46~50'    FROM dual
UNION ALL SELECT 7, 51, 55, '51~55'    FROM dual
UNION ALL SELECT 8, 56, 99, '56세이상' FROM dual
)
SELECT NVL(a.gb, '(총계)') gb
     , COUNT(x) tot
     , COUNT(DECODE(x, 0, 1)) "0"
     , COUNT(DECODE(x, 1, 1)) "1"
     , COUNT(DECODE(x, 2, 1)) "2"
     , COUNT(DECODE(x, 3, 1)) "3"
     , COUNT(DECODE(x, 4, 1)) "4"
     , COUNT(DECODE(x, 5, 1)) "5"
     , COUNT(DECODE(x, 6, 1)) "6"
     , COUNT(DECODE(x, 7, 1)) "7"
     , COUNT(DECODE(x, 8, 1)) "8"
     , COUNT(DECODE(x, 9, 1)) "9"
     , COUNT(CASE WHEN x BETWEEN 10 AND 14 THEN 1 END) "10~"
     , COUNT(CASE WHEN x BETWEEN 15 AND 19 THEN 1 END) "15~"
     , COUNT(CASE WHEN x >= 20             THEN 1 END) "20~"
  FROM code_t a
     , (SELECT FLOOR(MONTHS_BETWEEN(TRUNC(sysdate), TO_DATE(enter_dt, 'yyyymmdd')) / 12) x -- 근속년
             , FLOOR(MONTHS_BETWEEN(TRUNC(sysdate), TO_DATE(birth_dt, 'yyyymmdd')) / 12) y -- 만나이
          FROM emp
         WHERE retire_dt IS NULL  -- 퇴직자 제외
        ) b
 WHERE b.y(+) BETWEEN a.s AND a.e
 GROUP BY ROLLUP((a.lv, a.gb))
 ORDER BY lv
;

 


by DONKEY [2017.03.09 14:14:21]

감사합니다... 이런 비슷한쿼리를 세개정도 짜야되는데 한번에 다 해결될듯 싶습니다.. 고개 숙여 감사드립니다


by 마농 [2017.03.09 16:01:47]

쿼리 수정 했습니다.
아우터 조인 기호(+) 를 빼먹었네요.


by DONKEY [2017.03.09 16:31:58]

넵 감사합니다 안그래도 로우가 좀 덜나오길래 확인 후 추가 했습니다! 감사합니다


by 마농 [2017.03.10 08:39:39]

아!. 또 수정했어요.
 - CEIL ---> FLOOR


by DONKEY [2017.03.10 09:03:17]

아! 아침부터 한번더 훑어 주셔서 감사합니다 반올림보다는 버리는게 맞겠네용 하핳

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