KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | SQL CODEKATA
👪 조건에 맞는 회원수 구하기
🏷 관련 주제 : SELECT COUNT() 날짜 형식 변경
문제 설명
다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.
GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.
문제
USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
예시
예를 들어 USER_INFO 테이블이 다음과 같다면
2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원은 USER_ID 가 1, 3, 5 인 회원들 이므로, 다음과 같이 결과가 나와야 합니다.
| USERS |
|---|
| 3 |
✔ (Oracle) Solution with COUNT() & TO_CHAR()
SELECT COUNT(*) "USERS"
FROM USER_INFO
WHERE TO_CHAR(JOINED, 'YYYY') = '2021'
AND AGE BETWEEN 20 AND 29;
실행 결과

✔ (MySQL) Solution with COUNT() & DATE_FORMAT()
SELECT COUNT(*) "USERS"
FROM USER_INFO
WHERE DATE_FORMAT(JOINED, '%Y') = '2021'
AND AGE BETWEEN 20 AND 29;
실행 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
1. USER_INFO 테이블에서 AGE, JOINED 칼럼을 조회하자.
JOINED칼럼은 날짜 형식을 변경하여 연도만 출력하자.
MySQL : DATE_FORMAT(칼럼, '%Y')
Oracle : TO_CHAR(칼럼, 'YYYY')
칼럼명을 보기 편하게 "JOINED_YEAR"라고 별칭을 줌.
- MySQL
SELECT AGE , DATE_FORMAT(JOINED, '%Y') "JOINED_YEAR" FROM USER_INFO;실행 결과
AGE는 20세부터 44세까지,JOINED는 2021년과 2022년으로 다양한 데이터의 인스턴스들이 조회되었다.
- Oracle
SELECT AGE , TO_CHAR(JOINED, 'YYYY') "JOINED_YEAR" FROM USER_INFO;실행 결과
AGE는 20세부터 44세까지,JOINED는 2021년과 2022년으로 다양한 데이터의 인스턴스들이 조회되었다.
2. 위의 조회 결과에서 JOINED의 연도가 2021인 인스턴스만 조회하기
- MySQL
SELECT AGE , DATE_FORMAT(JOINED, '%Y') "JOINED_YEAR" FROM USER_INFO WHERE DATE_FORMAT(JOINED, '%Y') = '2021';실행 결과
AGE는 아직 20세부터 44세까지 다양한 데이터가 존재하지만JOINED는 2021년인 인스턴스만 조회되었다.
3. 위의 조회 결과에서 AGE가 20세 이상 29세 이하인 인스턴스만 조회하기
- MySQL
SELECT AGE , DATE_FORMAT(JOINED, '%Y') "JOINED" FROM USER_INFO WHERE DATE_FORMAT(JOINED, '%Y') = '2021' AND AGE BETWEEN 20 AND 29;실행 결과
AGE는 아직 20세부터 29세까지,JOINED는 2021년인 인스턴스만 조회되었다.
4. 위의 조회결과에서 AGE 칼럼과 JOINED칼럼을 대신 인스턴스의 총 개수 조회하기
- MySQL
SELECT COUNT(*) USERS FROM USER_INFO WHERE DATE_FORMAT(JOINED, '%Y') = '2021' AND AGE BETWEEN 20 AND 29;실행 결과

💬 무엇을 새롭게 알았는지
- 집계함수
COUNT()를 사용해 보았다. - 날짜 형식을 변경해 보았다.
- MySQL :
DATE_FORMAT(칼럼, '%Y') - Oracle :
TO_CHAR(칼럼, 'YYYY')
- MySQL :