[SQL] 조건에 맞는 회원수 구하기

Ray·2025년 3월 1일
0

SQL

목록 보기
2/19

🔎 문제설명

  • 출처: 프로그래머스
  • 사용언어(RDBMS): SQL(MySQL)
  • 문제

    USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.



✅ 제출답안

# USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이
# 몇 명인지 출력하는 SQL문을 작성
SELECT COUNT(USER_ID) AS USERS
FROM USER_INFO
WHERE (YEAR(JOINED) = '2021') AND (AGE BETWEEN 20 AND 29)


🚀 풀이기록

문제에 제시된 조건을 사용하려면 어떤 연산자와 함수를 사용해야할지 몰라 튜토리얼을 찾아보았다.

나이의 범위는 BETWEEN()함수를 찾아 해결했다.

날짜 데이터에 대해선 특정 년,월,일을 추출하려면 EXTRACT()를 사용하라고 나와있어서 사용해서 해결했다. 좀 낯선 함수라서 전에 배운 강의에 있는지 확인해보았더니 없었던 것 같았다. 혹시 몰라서 perplexity와 gemini에게 물어보니 EXTRACT()는 ANSI SQL 함수라서 여러 데이터베이스에서 범용적으로 사용가능하나(오라클DB에서도 사용가능), 모든 데이터베이스에서 호환되지 않을 가능성이 있다고 했다.

반면 YEAR()는 mysql에서만 사용가능한 함수이므로, 더 최적화될 수 있다고 했다. 또한 YEAR()라는 함수명이 간결하게 의미를 더 직관적으로 전달할 수 있다는 점을 장점으로 설명했다.

또한 해당문제에 대해 처음 답에서 두 조건을 연결할 때 비트연산자인 & 을 사용했다(이렇게해도 정답으로 처리되었다.) 그런데 이 부분에 대해서도 perplexity와 gemini 둘 다 논리연산자 AND 연산자로 바꿔서 사용하라고 했다. 이유는 비트 연산자는 두 피연산자의 비트를 비교하여 둘 다 1인 것만 1로 표시하는 것이고,

AND 연산자는 두 불리언(boolean) 표현식의 참, 거짓을 비교하여 둘 다 참인 경우만 결과가 참으로 표시하는 것이기 때문이라고 한다.

따라서 위의 두 개의 조건을 결합하기 위해서 AND 연산자를 사용해야 하며 & 를 사용하는 경우 경우에 따라서 엉뚱한 결과가 나올 수 있다고 했다.

profile
미래의 독자인 나를 위해 글을 씁니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN