일단 Docs를 보면
https://www.postgresql.org/docs/9.5/functions-aggregate.html
Aggregate Functions
Aggregate functions compute a single result from a set of input values. The built-in normal aggregate functions are listed in Table 9-49 and Table 9-50. The built-in ordered-set aggregate functions are listed in Table 9-51 and Table 9-52. Grouping operatio
www.postgresql.org
정의 자체가 count(*)이면 그냥 전체 row 수를 세고,
COUNT(expression)일 때는 null이 아닌 것들에 대해서만 세도록 되어 있다. 여기에서 expression은 값이 아닌 column 명 같은 것을 의미한다.
COUNT(*)
=COUNT(1)=COUNT(0)=COUNT(9999999)
괄호 안에 들어가는 값을 세는 것이 아니다. 다른 프로그래밍 언어에서 쓰던 것처럼 뭔가 의미가 COUNT(89)이면 89라는 int값을 가진 행을 세어줄 것 같았는데 아니다. 또한 이 숫자가 column 번호(position number)도 아니었다. position number은 예를 들어 name, gender, age라는 column들이 있는 table이라면 age 열의 position number은 3이 된다. 중요한건 여기서 position number를 의미하는 점이 아니라는 것이다
COUNT(expression)
여기에 이제 column 이름을 적어주면 null을 뺀 나머지 row의 갯수를 세어준다. 다시 말하지만 여기에 position number을 적으면 원하는 결과를 얻을 수 없다.
NULL 인 행의 갯수 세기
COUNT(NULL)를 쓰면 안 된다.
SUM(CASE WHEN "열 이름" IS NULL THEN 1 END)
로 알아낼 수 있다
예제
- count(1) = 7
- count(2) = 7
- count(v1) = 6
- count(v2) = 4
- count(NULL) = 0
- SUM(CASE WHEN v2 IS NULL THEN 1 END) = 3
'Database' 카테고리의 다른 글
VSCode에서 redshift의 Postgresql 사용법 (0) | 2023.03.31 |
---|---|
[DB] Data Modeling : Conceptual (2) | 2023.03.14 |