프로그래머스 LV 1. 131528 나이 정보가 없는 회원 수 구하기 MySQL

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

 

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

or 

SELECT SUM(AGE IS NULL) AS USERS
FROM USER_INFO

 

처음에, 

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

라고 작성했는데, 이렇게 작성하면 0개가 나온다. 

 

COUNT() 를 사용해보면, NULL 인 경우는 제외하고 행의 갯수를 세준다

그런데 WHERE에서 이미 NULL 인 경우들은 제외를 해버렸기 때문에 그렇다면 AGE가 NULL 인 경우들만 남고, 

거기서 COUNT(AGE) 를 시행하면 NULL 인 경우들은 제외하고 숫자를 세기 때문에 그 경우 0개가 나온다.

 COUNT() 를 할때 NULL을 제외하고 카운트를 해준다는걸 주의하도록 하자. 

 

*참고*

`COUNT(AGE)`는 AGE 열이 NULL이 아닌 행의 수를 세는 것입니다. 따라서 `NULL`인 행은 `COUNT`에 영향을 미치지 않고 무시됩니다. 

이런 동작이 발생하는 이유는 `COUNT` 함수가 NULL이 아닌 값을 가진 행만을 계산하기 때문입니다. `COUNT` 함수는 특정 열의 NULL 값을 세지 않습니다. 즉, `COUNT(AGE)`는 AGE 열이 NULL이 아닌 행만을 고려하고, NULL인 행은 무시합니다.

따라서 `ORDER BY USER_ID`와는 별개로 AGE가 NULL이 아닌 행의 수만을 반환하게 됩니다. `ORDER BY`는 결과를 정렬하는데만 영향을 미치고, `COUNT` 함수는 그룹화나 정렬과는 무관하게 독립적으로 각 행의 개수를 세는 역할을 합니다.
  Comments,     Trackbacks