본문으로 바로가기
본문으로 바로가기

quantilesGK

quantilesGK

도입 버전: v23.4

Greenwald-Khanna 알고리즘을 사용하여 수치 데이터 시퀀스에 대해 서로 다른 여러 레벨의 분위수(quantile)를 동시에 계산합니다.

이 함수는 quantileGK와 유사하게 동작하지만, 단일 패스로 여러 분위수 레벨을 계산할 수 있어 개별 분위수 함수를 각각 호출하는 것보다 더 효율적입니다.

Greenwald-Khanna 알고리즘은 데이터 스트림에서 분위수를 매우 효율적으로 계산하는 데 사용되는 알고리즘입니다. 이 알고리즘은 2001년에 Michael Greenwald와 Sanjeev Khanna에 의해 소개되었습니다. 입력 크기를 n이라 할 때, 이 알고리즘은 O(log n)의 공간과 항목당 O(log log n)의 시간만 사용하므로 매우 효율적입니다. 또한 제어 가능한 정확도로 분위수 값을 근사하여 제공하므로 정확성도 매우 높습니다.

구문

quantilesGK(accuracy, level1, level2, ...)(expr)

매개변수

  • accuracy — 분위수의 정확도입니다. 양의 정수 상수입니다. 값이 클수록 오차가 작습니다. 예를 들어 accuracy 인자를 100으로 설정하면, 계산된 분위수는 높은 확률로 최대 1% 이하의 오차만을 가집니다. 계산된 분위수의 정확도와 알고리즘의 계산 복잡도 사이에는 트레이드오프가 있습니다. UInt*
  • level — 분위수의 수준입니다. 0부터 1 사이의 하나 이상의 상수 부동소수점 수입니다. Float*

인수

  • expr — 숫자 데이터 타입, Date 또는 DateTime을 결과로 내는 컬럼 값에 대한 표현식입니다. (U)Int* 또는 Float* 또는 Decimal* 또는 Date 또는 DateTime

반환 값

지정된 수준에 대한 분위수 배열을, 수준이 지정된 것과 동일한 순서로 반환합니다. Array(Float64) 또는 Array(Date) 또는 Array(DateTime)

예시

GK 알고리즘을 사용하여 여러 분위수를 계산하기

SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1, 1, 1]                                        │
└──────────────────────────────────────────────────┘

더 높은 정밀도의 분위수

SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251, 498, 741]                                    │
└────────────────────────────────────────────────────┘