[mysql/oracle] 나이 정보가 없는 회원 수 구하기

2023. 1. 27. 02:45Programmers/SQL

문제

결과

mysql

1
2
select sum(age is null) users
from user_info
cs

age가 null이라면 true라서 0을 반환 / null이 아니라면 false라서 1을 반환

 

oracle

1) decode

1
2
SELECT count(decode(age, null0)) users
from user_info
cs

200개의 row를 decode로 돌리면 200개 중 decode의 조건식에 해당되는 row들만 출력대상이고 조건식에 해당되지 않으면 출력되지 않는다. -> 200개 이하의 row가 출력된다.
그러므로 age가 null인 것들만 count하고 null이 아닌 값들은 출력 대상에서 제외되므로 count 되지 않는다.

 

2) nvl - 틀린 이유

1
2
SELECT count(nvl(age, 0)) users
from user_info
cs

200개의 row를 nvl로 돌리면 모든 row를 대상으로 null인 경우 아닌 경우를 나눠서 null인 경우에 지정된 값을 주기 때문에
모든 row가 출력대상이다. -> 200개가 출력된다.
age가 null이면 0이고 아니면 원래 값을 출력한다.