코딩테스트/SQL 문제

[프로그래머스] 131535 조건에 맞는 회원수 구하기 - SQL

glorypang 2025. 3. 21. 17:48
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐
  • 문제 유형: SELECT / WHERE
  • 사용 언어: SQL

🔍 문제 설명

다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_IDGENDERAGEJOINED는 각각 회원 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