SQL 프로그래머스 | 나이 정보가 없는 회원 수 구하기 | IS NULL과 COUNT() | COUNT(*)와 COUNT(컬럼명)의 차이 | CASE문, IF문
나이 정보가 없는 회원 수 구하기
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만 세주므로
정답이 나옴