[Google/BigQuery] 집계 함수

류성훈·2022년 8월 9일
0

빅쿼리

목록 보기
4/5
post-thumbnail

집계 함수

ANY_VALUE

그룹에서 선택한 일부 행의 expression을 반환합니다.

선택할 행은 확정되어있지 않으며 무작위가 아닙니다.

입력으로 행이 생성되지 않으면 NULL을 반환합니다.

모든 행에서 expressionNULL이면 NULL을 반환합니다.

예시

SELECT ANY_VALUE(fruit) as any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;

SELECT
  fruit,
  ANY_VALUE(fruit) OVER (ORDER BY LENGTH(fruit) ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;

ARRAY_AGG

expression 값의 ARRAY를 반환합니다.

최종 쿼리 결과의 배열에 NULL 요소가 포함되어 있으면 오류가 발생합니다.

예시

SELECT ARRAY_AGG(x) AS array_agg FROM UNNEST([2, 1,-2, 3, -2, 1, 2]) AS x;

SELECT ARRAY_AGG(DISTINCT x) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

SELECT ARRAY_AGG(x IGNORE NULLS) AS array_agg
FROM UNNEST([NULL, 1, -2, 3, -2, 1, NULL]) AS x;

SELECT ARRAY_AGG(x ORDER BY ABS(x)) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

SELECT ARRAY_AGG(x LIMIT 5) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

ARRAY_CONCAT_AGG

ARRAY 유형의 expression 에서 요소들을 연결하여 단일 ARRAY를 결과로 반환합니다.

최종 쿼리 결과 배열에 NULL 요소가 포함되어 있으면 오류가 발생합니다.

예시

SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x)) AS array_concat_agg FROM (
  SELECT [NULL, 1, 2, 3, 4] AS x
  UNION ALL SELECT NULL
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x))) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x LIMIT 2)) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x) LIMIT 2)) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

AVG

NULL 이외 입력 값들의 평균을 반환하거나, 입력에 NaN이 포함되어 있는 경우 NaN을 반환합니다.

예시

SELECT AVG(x) as avg
FROM UNNEST([0, 2, 4, 4, 5]) as x;

SELECT AVG(DISTINCT x) AS avg
FROM UNNEST([0, 2, 4, 4, 5]) AS x;

SELECT
  x,
  AVG(x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS avg
FROM UNNEST([0, 2, NULL, 4, 4, 5]) AS x;

BIT_AND

expression에 대해 비트 AND 연산을 수행하여 그 결과를 반환합니다.

예시

SELECT BIT_AND(x) as bit_and FROM UNNEST([0xF001, 0x00A1]) as x;

BIT_OR

expression에 대해 비트 OR 연산을 수행하여 그 결과를 반환합니다.

예시

SELECT BIT_OR(x) as bit_or FROM UNNEST([0xF001, 0x00A1]) as x;

BIT_XOR

expression에 대해 비트 XOR 연산을 수행하여 그 결과를 반환합니다.

예시

SELECT BIT_XOR(x) AS bit_xor FROM UNNEST([5678, 1234]) AS x;

  • XOR : 연산자가 같지않으면 1을 반환, 같으면 0을 반환

COUNT

입력에 있는 행의 수를 반환합니다.

NULL 이외의 값으로 평가된 expression이 있는 행의 수를 반환합니다.

예시

SELECT
  COUNT(*) AS count_star,
  COUNT(DISTINCT x) AS count_dist_x
FROM UNNEST([1, 4, 4, 5]) AS x;

COUNTIF

expressionTRUE값 개수를 반환합니다.

입력 행이 없거나 expression이 모든 행에 대해 FALSE 또는 NULL로 평가하는 경우 0을 반환합니다.

예시

SELECT COUNTIF(x<0) AS num_negative, COUNTIF(x>0) AS num_positive
FROM UNNEST([5, -2, 3, 6, -10, -7, 4, 0]) AS x;

MAX

NULL이 아닌 표현식의 최댓값을 반환합니다.

입력에 NaN이 포함된 경우 NaN을 반환합니다.

예시

SELECT MAX(x) AS max
FROM UNNEST([8, 27, 4, 55]) AS x;

MIN

NULL이 아닌 표현식의 최솟값을 반환합니다.

입력에 NaN이 포함 된 경우 NaN을 반환합니다.

예시

SELECT MIN(x) AS min
FROM UNNEST([8, 37, 4, 55]) as x;

STRING_AGG

NULL이 아닌 값을 연결하여 얻은 값(STRING 또는 BYTES)을 반환합니다.

0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

delimiter가 지정된 경우 연결된 값이 해당 구분 기호로 구분되고, 그렇지 않은 경우 쉼표가 구분 기호로 사용됩니다.

예시

SELECT STRING_AGG(fruit) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;

SELECT STRING_AGG(fruit, " & ") AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;

SELECT
  fruit,
  STRING_AGG(fruit, " & ") OVER (ORDER BY LENGTH(fruit)) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;

SUM

null이 아닌 값의 합계를 반환합니다.

표현식이 부동 소수점 값인 경우, 합계가 확정값이 아닙니다.

즉, 이 함수를 사용할 때마다 다른 결과를 얻을 수 있다는 뜻입니다.

예시

SELECT SUM(x) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;


출처
https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions?hl=ko

profile
(전)Backend Developer / (현)Data Engineer

0개의 댓글