본문 바로가기
Language/DB

[Programmers | SQL | SELECT 문제 풀이] 조건에 맞는 회원수 구하기 - Solution with COUNT() & 날짜 형식 변경

by ㅇ달빛천사ㅇ 2024. 6. 18.
728x90

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')
728x90


Top