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 |
+---------------------------------------------------+