생년월일 이용 나이 구한 후 조건에 따른 분류 0 4 3,480

by 피터슨 [Oracle 기초] [2017.11.13 11:08:46]


안녕하세요.

select TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(생년월일, 'yyyymmdd'))/12)

from 테이블

 

생년월일을 이용하여 나이들을 구했는데 이 나이에 대한 분류를 하고 싶습니다.

10살 미만 - ?명

10살 이상 20살 미만 - ?명

이런식으로 몇명인지 알고 싶은데 조건을 어떻게 넣어야 하는지 모르겠습니다.

어떻게 해야할까요?

by 마농 [2017.11.13 13:16:41]

일률적으로 10살 단위로 자를 건가요?
보통는 최소, 최대 쪽에서는 하나로 퉁치는 경향이 있던데요?
(예 : 20세미만, 20대, 30대, 40대, 50대, 60세 이상)

SELECT (FLOOR(age / 10) * 10     ) || '살 이상' || ' ~ ' ||
       (FLOOR(age / 10) * 10 + 10) || '살 미만' AS age_gb
     , COUNT(*) cnt
  FROM (SELECT TRUNC(MONTHS_BETWEEN(sysdate, TO_DATE(생년월일, 'yyyymmdd'))/12) age
          FROM 테이블
        )
 GROUP BY FLOOR(age / 10)
 ORDER BY FLOOR(age / 10)
;

 


by 피터슨 [2017.11.13 13:33:52]

아 마농님 말씀이 맞네요

하나로 퉁치는게 맞는것 같습니다. 그런 경우에는 일일이 조건을 걸어줘야하는건가요 ?


by 마농 [2017.11.13 14:18:50]
SELECT age_gb
     , COUNT(*) cnt
  FROM (SELECT CASE WHEN               age < 20 THEN '20세미만'
                    WHEN age >= 20 AND age < 30 THEN '20세이상 ~ 30세미만'
                    WHEN age >= 30 AND age < 40 THEN '30세이상 ~ 40세미만'
                    WHEN age >= 40 AND age < 50 THEN '40세이상 ~ 50세미만'
                    WHEN age >= 50 AND age < 60 THEN '50세이상 ~ 60세미만'
                    WHEN age >= 60              THEN '60세이상'
                END age_gb
          FROM (SELECT TRUNC(MONTHS_BETWEEN(sysdate, TO_DATE(생년월일, 'yyyymmdd'))/12) age
                  FROM 테이블
                )
        )
 GROUP BY age_gb
 ORDER BY age_gb
;

 


by 피터슨 [2017.11.13 14:57:53]

감사합니다!

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