MySQL에서 특정 기간(예: 1980년 1월 1일 ~ 1996년 12월 31일) 사이에 태어난 사용자의 비율을 계산하는 방법을 단계별로 알아보겠습니다. 핵심은 SUM() 함수와 COUNT(*)를 함께 활용하는 것입니다.
1. 테이블 생성하기
먼저 생년월일을 저장할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> DateOfBirth varchar(100)
-> );
Query OK, 0 rows affected (0.55 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 생년월일 데이터를 입력합니다.
mysql> insert into DemoTable values('2019/01/31');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('1980/02/01');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('1985/04/10');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('1995/06/04');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('1990/12/24');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('1996/11/04');
Query OK, 1 row affected (0.19 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+-------------+
| DateOfBirth |
+-------------+
| 2019/01/31 |
| 1980/02/01 |
| 1985/04/10 |
| 1995/06/04 |
| 1990/12/24 |
| 1996/11/04 |
+-------------+
6 rows in set (0.00 sec)
4. 특정 기간 출생자의 비율 계산하기
다음 쿼리는 1980년부터 1996년 사이에 태어난 사용자가 전체 중 몇 퍼센트인지 계산합니다.
mysql> SELECT Sum(DateOfBirth BETWEEN '1980/01/01' AND '1996/12/31') * 100 / Count(*) as Percentage from DemoTable;
출력 결과
+------------+
| Percentage |
+------------+
| 83.3333 |
+------------+
1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 작동하는 이유는 MySQL에서 BETWEEN 조건식은 조건을 만족하면 1, 만족하지 않으면 0을 반환하기 때문입니다.
SUM(DateOfBirth BETWEEN ...): 조건에 해당하는 행의 개수를 합산합니다. 위 예제에서는 6개 중 5개(1980/02/01, 1985/04/10, 1995/06/04, 1990/12/24, 1996/11/04)가 해당되므로 5가 됩니다.* 100 / Count(*): 해당 개수를 전체 행 수로 나누고 100을 곱해 백분율로 변환합니다. 즉, 5 / 6 * 100 = 83.3333%입니다.
결과적으로 1980년~1996년 사이에 태어난 사용자는 전체의 약 83.33%임을 확인할 수 있습니다.
참고: 실무에서는 날짜를 VARCHAR가 아닌 DATE 타입으로 저장하고, ISO 표준 형식(YYYY-MM-DD)을 사용하는 것이 정렬·비교 연산에 훨씬 유리합니다.