카테고리:

집계 함수 (일반) , 윈도우 함수 (일반, 윈도우 프레임)

COUNT_IF

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

참고 항목:

COUNT

구문

집계 함수

COUNT_IF( <condition> )
Copy

윈도우 함수

COUNT_IF( <condition> )
    OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
Copy

window_frame 구문에 대한 자세한 내용은 윈도우 프레임 구문과 사용법 을 참조하십시오.

인자

condition

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

expr1

결과를 여러 윈도우로 분할하려는 경우 분할할 열입니다.

expr2

각 윈도우를 정렬할 열입니다. 이는 최종 결과 세트를 정렬하기 위한 모든 ORDER BY 절과는 별개입니다.

반환

이 함수가 NULL을 반환하지 않는 경우 반환된 값의 데이터 타입은 NUMBER입니다.

사용법 노트

  • 이 함수가 윈도우 함수로 호출될 때:

    • OVER() 절 내에서 ORDER BY 하위 절을 사용하는 경우, 윈도우 프레임을 사용해야 합니다. 윈도우 프레임이 지정되지 않은 경우, 기본값은 누적 윈도우 프레임입니다.

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      구문 및 예를 비롯하여 윈도우 프레임에 대한 자세한 내용은 윈도우 프레임 구문과 사용법 을 참조하십시오. 암시적 윈도우 프레임에 대한 자세한 내용은 윈도우 프레임 사용법 노트 를 참조하십시오.

이 섹션의 예는 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);
Copy
SELECT *
    FROM basic_example
    ORDER BY i_col;
Copy
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+

다음 예는 조건에 대해 TRUE 를 전달하며, 이는 테이블의 모든 행 수를 반환합니다.

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

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

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

위의 예에서 개수에는 NULL 값이 있는 행이 포함되지 않습니다. 3진 논리 에서 설명했듯이 비교 연산자의 피연산자가 NULL인 경우 결과는 NULL이 되며, 이는 COUNT_IF 에서 지정한 조건을 충족하지 않습니다.

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

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