코딩테스트/SQL 코드카타

SQL 프로그래머스 | 나이 정보가 없는 회원 수 구하기 | IS NULL과 COUNT() | COUNT(*)와 COUNT(컬럼명)의 차이 | CASE문, IF문

ANNASENA 2024. 2. 2. 10:54
728x90

 

나이 정보가 없는 회원 수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/131528

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

USER_INFO 테이블에서 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 
이때 컬럼명은 USERS로 지정해주세요.

 

▼ IS NULL, COUNT(*)

SELECT COUNT(*) USERS
FROM USER_INFO
WHERE AGE IS NULL

 

나이 정보가 없는 회원을 찾고 있으므로

WHERE절IS NULL 조건을 줌

그러면 전체 데이터가 아닌

나이 정보가 없는 회원에 대한 정보만 조회됨

 

나이가 없는 회원의 수를 출력해야 하므로

COUNT() 해줘야 함

그런데 여기서 주의할 점은

COUNT(컬럼명)이 아니라

COUNT(*)를 해줘야 함

 

COUNT(*)NULL값을 포함한 전체데이터를 세주기 때문.

나이가 없는(NULL) 데이터를 세려고 하는데

COUNT(컬럼명)을 해버리면 값이 0이 나옴

 

나이가 없는 회원 수의 컬럼명은 USERS라고 지정해줬으므로

(AS) USERS 라고 뒤에 명명해줌

AS 지정할 컬럼명 으로 컬럼명을 정할 수 있는데

이 때 AS는 생략할 수 있음

단, 한글 컬럼명 등을 지정해주고 싶을 때는

" " (큰 따옴표) 안에 적어줘야 함


▼ COUNT(*) - COUNT(AGE)

SELECT COUNT(*)-COUNT(AGE) AS USERS
FROM USER_INFO

 

COUNT(*) NULL값을 포함한 전체 데이터에서

COUNT(AGE) NULL값이 포함되지 않은 데이터를 빼서

조회한 경우도 있었음

다른 사람들 답 보는 재미가 쏠쏠한 이유ㅋㅋ

정석만 생각하다보면 이런 건 생각 못함


▼ CASE 문 사용

SELECT SUM(CASE WHEN AGE IS NULL THEN 1 
           ELSE 0 
           END) AS USERS
FROM USER_INFO;

 

CASE문을 사용해서

WHEN 나이 정보가 없는 경우에는 1,

ELSE 있는 경우에는 0이 출력되게 해서

그 값들을 다 SUM() 해줌


▼ IF문

SELECT COUNT(IF(AGE IS NULL, USER_ID, NULL)) USERS
FROM USER_INFO;

 

이번에는 IF문으로 구해보자.

IF(조건문, 조건이 참일 때 출력 값, 조건이 거짓일 때 출력값)

IF 만약 나이 정보가 없다면,

USER_ID를 출력해주고,

나이 정보가 있는 경우오히려 NULL값으로 출력해버리긔!

그리고 이 USER_ID를 COUNT해주면

나이 정보가 없는 USER_ID만 세주므로

정답이 나옴

728x90