SQL

SQL 프로그래머스

GABOJOK 2023. 6. 4. 03:29

문제 설명

다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.

Column  name                                               Type                                                                        Nullable
USER_ID INTEGER FALSE
GENDER TINYINT(1) TRUE
AGE INTEGER TRUE
JOINED DATE FALSE

GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.


문제

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

 

select count(user_id) from USER_INFO
where year(JOINED) = 2021 and AGE >= 20 and AGE < 30

 

 

1. where 절 and를 활용해서 중첩하기.

만약 between and를 썻으면 이렇게 못했다. (오류가 나더라규.....)

근데 year(JOINED) = 2021 이라는 표현을 통해서 

JOINED 라는 필드에서 year 가 2021 이라는 조건식을 넣어주었다. 

다른분들은 이거 어떻게 풀으셧는지 궁금하당..

 

 

 

2. NULL 인 것만 뽑아보기.

 

보고싶은 필드의 데이터가 NULL  인것만 뽑아보려면 아래와 같이 하면 된다. 

 

where NAME is NULL

 

이렇게 하면 NAME 값이 없는 것만 조건식으로 골라져서 뽑힌다. 

 

 

 

 

 

3. order by 를 중복해서 해야할때

만약 date 를 내림차순 정렬을 하는데, date가 중복된 경우 name 을 오름차순 정렬을 하라고 하는 상황이 주어진다면??

 

아래와 같이 하면 된다. 

order by date desc, name

 

이처럼 콤마 하나로 아주 간단하게 해결할 수 있다,,,,,ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ

 

 

4.  조건이 많은데, 거기에다가 어떤 필드에 값중 null이 있는 경우 'n' 으로 출력해줘~~ 하고싶을때

 

 

IFNULL(TLNO, 'NONE') 

조건문null(필드이름, '대체할 내용')

 

 

 

문제

PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.

 

 

select PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') 
from PATIENT 
where AGE <= 12 and GEND_CD in ('w')
order by AGE desc, PT_NAME