COUNT_IF

COUNT_IF

조건을 만족하는 레코드의 수를 반환하거나, 조건을 만족하는 레코드가 없으면 NULL을 반환하는 집계·윈도우 함수예요.

출처: 공식 문서

본문

조건을 만족하는 레코드의 수를 반환하거나, 조건을 만족하는 레코드가 없으면 NULL을 반환합니다.

참고 (See also): COUNT

구문 (Syntax)

집계 함수 (Aggregate function)

COUNT_IF( <condition> )

윈도우 함수 (Window function)

COUNT_IF( <condition> )
    OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <window_frame> ] ] )

자세한 window_frame 구문은 Window function syntax and usage를 참고하세요.

인자 (Arguments)

조건은 BOOLEAN 값(True, False 또는 NULL)으로 평가되어야 하는 표현식입니다.

결과를 여러 윈도우로 나누려면 파티션으로 나눌 열입니다.

각 윈도우를 정렬할 열입니다. 이 열은 최종 결과 집합을 정렬하는 ORDER BY 절과는 별개라는 점을 참고하세요.

반환값 (Returns)

함수가 NULL을 반환하지 않으면 반환 값의 데이터 타입은 NUMBER입니다.

사용 참고 사항 (Usage notes)

이 함수가 ORDER BY 절이 있는 윈도우 함수로 호출되면 윈도우 프레임을 지정해야 합니다. 윈도우 프레임을 지정하지 않으면 다음 기본 프레임이 사용됩니다:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

윈도우 프레임에 대한 자세한 내용(구문, 사용 참고 사항, 예제 포함)은 Window function syntax and usage를 참고하세요.

예제 (Examples)

이 섹션의 예제들은 COUNT_IF 함수를 사용하는 방법을 보여줍니다.

다음 문들은 예제에서 사용할 테이블을 준비합니다:

CREATE TABLE basic_example (i_col INTEGER, j_col INTEGER);

INSERT INTO basic_example VALUES
  (11, 101), (11, 102), (11, NULL), (12, 101), (NULL, 101), (NULL, 102);
SELECT *
  FROM basic_example
  ORDER BY i_col;
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+

다음 예제는 조건에 TRUE를 전달하여 테이블의 모든 행의 개수를 반환합니다:

SELECT COUNT_IF(TRUE)
  FROM basic_example;
+----------------+
| COUNT_IF(TRUE) |
|----------------|
|              6 |
+----------------+

다음 예제는 J_COL의 값이 I_COL의 값보다 큰 행의 수를 반환합니다:

SELECT COUNT_IF(j_col > i_col)
  FROM basic_example;
+-------------------------+
| COUNT_IF(J_COL > I_COL) |
|-------------------------|
|                       3 |
+-------------------------+

위 예제에서 수에 NULL 값을 가진 행이 포함되지 않는다는 점을 참고하세요. Ternary logic에서 설명했듯이 비교 연산자의 피연산자 중 하나가 NULL이면 결과는 NULL이며, 이는 COUNT_IF가 지정하는 조건을 만족하지 않습니다.

다음 예제는 NULL 값을 전혀 포함하지 않는 행의 수를 반환합니다.

SELECT COUNT_IF(i_col IS NOT NULL AND j_col IS NOT NULL)
  FROM basic_example;
+---------------------------------------------------+
| COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) |
|---------------------------------------------------|
|                                                 3 |
+---------------------------------------------------+

더 알아보기 (Learn more)