728x90
반응형
SMALL
📌 문제 정보
- 출처: 문제 링크
- 난이도: ⭐
- 문제 유형: SELECT / WHERE
- 사용 언어: SQL
🔍 문제 설명
다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다. GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.
USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
💡 풀이 노트
0. BETWEEN으로 날짜 비교
- 조건에 맞게 `BETWEEN`으로 비교
(JOINED BETWEEN '2021.01.01' AND '2021.12.31')
1. YEAR() 함수 (날짜 타입인 경우)
- YEAR() 날짜에서 연도 부분만 반환
- YEAR() 숫자 범위: 1,000 ~ 9,999
- 날짜 컬럼이 DATE 또는 DATETIME 타입일 때 사용 가능
YEAR(JOINED) = 2021
| 함수 | 설명 |
| YEAR(date) | 연도 추출(예: 2021) |
| MONTH(date) | 월 추출(예: 1 ~ 12) |
| DAY(date) | 일 추출(예: 1 ~ 31) |
2. `LIKE` 를 활용(문자열 타입인 경우)
- 컬럼이 `VARCHAR`, `CHAR`, `TEXT` 등 문자열 타입인 경우 사용 가능
- `2021%` → `2021-01-01` , `2021.05.10` , `2021/12/10` 등
- MySQL에서는 내부적으로 DATE → VARCHAR로 변환
- JOINED = '2021-08-01 → 문자열 2021-08-01 로 변환 → 2021% 에 매치됨
- PostgreSQL, ORACLE, SQL Server 에서는 오류 발생
JOINED LIKE '2021%';
🚀 코드 (Java)
SELECT count(*) as USERS
FROM USER_INFO
WHERE (JOINED BETWEEN '2021.01.01' AND '2021.12.31') AND
(AGE BETWEEN 20 AND 29)
🖥 실행 결과
USERS
97
📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest
728x90
반응형
LIST