연령대별로 카운트 세는 쿼리 질문입니다.. 0 2 2,232

by 잼따군 [2012.08.02 16:32:43]



 SELECT SUBSTR(sys_age,1,1) AS gubun, COUNT(*) cnt
 FROM (select (CASE WHEN SUBSTR(주민번호,7,1) IN ('1','2','5','6')
      THEN TO_char(SYSDATE,'yyyy') - TO_NUMBER('19'||SUBSTR(주민번호,1,2))+1
      WHEN SUBSTR(주민번호,7,1) IN ('3','4','7','8')
      THEN TO_char(SYSDATE,'yyyy') - TO_NUMBER('20'||SUBSTR(주민번호,1,2))+1
END) sys_age, career, lastedu
  FROM TO_MEMBER
  WHERE  SUBSTR(INDATE,1,8) <= '20120801'
    AND ID IS NOT NULL
    AND RESNO IS NOT null
    AND memberyn = 'Y'
    AND memcode = '0001'
AND exityn = 'N')
 WHERE  SUBSTR(sys_age,1,1) BETWEEN '1' AND '6'
 GROUP BY SUBSTR(sys_age,1,1)
 ORDER BY gubun ASC

거의다 왔다고 생각은 되는데 이건 10대 부터 60대까지만 보여주거든요...
근데 60대 row에 60대 이상 되는 카운트 값들을 전부 합쳐 넣어야 해요....
도와주십쇼 고수님들 오늘 하루 이거로 다보낼듯요..ㅠㅠ
by 마농 [2012.08.02 17:17:25]
SELECT LEAST(FLOOR(sys_age / 10), 6) AS gubun
     , COUNT(*) AS cnt
  FROM (
        SELECT TO_CHAR(sysdate,'yyyy') -
               (CASE WHEN SUBSTR(주민번호,7,1) IN ('9','0') THEN '18'
                     WHEN SUBSTR(주민번호,7,1) IN ('1','2','5','6') THEN '19'
                     WHEN SUBSTR(주민번호,7,1) IN ('3','4','7','8') THEN '20'
                 END || SUBSTR(주민번호,1,2)
                ) + 1 AS sys_age
          FROM to_member
         WHERE indate <= '20120801'||'235959' -- 컬럼 가공(X), 조건값 가공(O)
           AND id IS NOT NULL
           AND resno IS NOT NULL
           AND memberyn = 'Y'
           AND memcode = '0001'
           AND exityn = 'N'
        )
 GROUP BY LEAST(FLOOR(sys_age / 10), 6)
 ORDER BY gubun
;

by 잼따군 [2012.08.08 13:24:48]

정신이없어서 인사가 늦었네요 마농님 감사해요 덕분에 일 잘 해결했습니다.ㅎㅎ;

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