9.21. 집계 기능#

토토 함수입력 값 세트에서 단일 결과를 계산합니다. 내장 된 일반 목적 토토 기능은에 나열되어 있습니다.표 9.60통계 응집체가있는 동안표 9.61. 내장 그룹 내 순서 세트 토토 함수는에 나열되어 있습니다.표 9.62내장 된 그룹 내 가상 세트가있는 동안표 9.63. 토토 함수와 밀접한 관련이있는 그룹화 작업은에 나와 있습니다.표 9.64. 토토 함수에 대한 특별 구문 고려 사항은에 설명되어 있습니다.섹션 4.2.7. 찾다43토토6463추가 입문 정보는

지원하는 토토 함수부분 모드병렬 토토와 같은 다양한 최적화에 참여할 수 있습니다.

아래의 모든 토토는 선택 사항을 수락합니다주문 by조항 (요약 된섹션 4.2.7),이 절은 주문에 의해 출력에 영향을받는 토토에만 추가되었습니다.

표 9.60. 일반 목적 집계 기능

기능

설명

부분 모드

Any_value(Anylement) →입력 유형과 동일

널이 아닌 입력 값에서 임의의 값을 반환합니다.

array_agg(​​AnynonArray 주문 by input_sort_columns) →AnyArray

널을 포함한 모든 입력 값을 배열로 수집합니다.

array_agg(AnyArray 주문 by input_sort_columns) →AnyArray

모든 입력 배열을 하나의 높은 차원의 배열로 연결합니다. (입력은 모두 같은 차원을 가져야하며 비어 있거나 널가 될 수 없습니다.)

avg(smallint) →숫자

avg(Integer) →숫자

avg(bigint) →숫자

avg(숫자) →숫자

avg(Real) →이중 정밀

avg(이중 정밀) →이중 정밀

avg(간격) →간격

모든 비 널 입력 값의 평균 (산술 평균)을 계산합니다.

bit_and(smallint) →smallint

bit_and(Integer) →정수

bit_and(bigint) →bigint

bit_and(bit) →비트

널 비 널 입력 값을 비트와 모든 비를 계산합니다.

bit_or(smallint) →smallint

bit_or(Integer) →Integer

bit_or(bigint) →bigint

bit_or(비트) →비트

널 비 널 입력 값을 비트 또는 모든 비 널 입력 값을 계산합니다.

bit_xor(smallint) →smallint

bit_xor(정수) →Integer

bit_xor(bigint) →bigint

bit_xor(비트) →비트

비트 와이드 독점 또는 모든 비 널 입력 값을 계산합니다. 정렬되지 않은 값 세트에 대한 체크섬으로 유용 할 수 있습니다.

bool_and(부울) →부울

모든 비 널 입력 값이 true 인 경우 true를 반환합니다.

bool_or(부울) →부울

널 비 널 입력 값이 true 인 경우 true를 반환합니다. 그렇지 않으면 거짓.

count(*) →bigint

입력 행 수를 계산합니다.

count("Any") →bigint

입력 값이 null이 아닌 입력 행의 수를 계산합니다.

Every(부울) →부울

이것은 SQL 표준의 것과 같습니다.bool_and.

JSON_AGG(Anylement 주문 by input_sort_columns) →JSON

JSONB_AGG(Anylement 주문 input_sort_columns) →JSONB

NULLS를 포함한 모든 입력 값을 JSON 어레이로 수집합니다. 값은에 따라 JSON으로 변환됩니다to_json또는TO_JSONB.

아니오

JSON_AGG_STRICT(Anylement) →JSON

JSONB_AGG_STRICT(Anylement) →JSONB

널을 건너 뛰는 모든 입력 값을 JSON 어레이로 수집합니다. 값은에 따라 JSON으로 변환됩니다to_json또는TO_JSONB.

아니오

json_arrayagg([value_expression] [주문 by Sort_Expression] [NULL | 결석on null] [반환 data_type[형식 JSON[UTF8 인코딩]]])

와 같은 방식으로 동작json_array그러나 토토 함수로서 하나만 사용합니다value_expression매개 변수. 만약에null에 결석지정되어 있으며, 널 값은 생략됩니다. 만약에주문 by지정되어 있습니다. 요소는 입력 순서 대신 해당 순서로 배열에 나타납니다.

json_arrayagg (v)에서 (값 (2), (1)) t (v)에서 선택하십시오.[2, 1]

아니오

json_objectagg([key_expressionvalue| ':'value_expression] [NULL | 결석ON NULL] [with | 없음고유 한[]] [반환 data_type[형식 JSON[UTF8 인코딩]]])

json_object그러나 토토 함수로서 하나만 사용합니다key_expressionand onevalue_expression매개 변수.

json_objectagg (k : v)에서 (값 ( 'a':: text, current_date), ( 'b', current_date + 1)) as t (k, v)에서 선택하십시오."A": "2022-05-10", "B": "2022-05-11"

아니오

json_object_agg( "Any", value "Any" 주문 by input_sort_columns) →JSON

JSONB_OBJECT_AGG( "Any", value "Any" 주문 by input_sort_columns) →JSONB

모든 키/값 쌍을 JSON 객체에 수집합니다. 주요 인수는 텍스트로 강요됩니다. 값 인수는에 따라 변환됩니다.to_json또는TO_JSONB. 값은 널가 될 수 있지만 키는 할 수 없습니다.

아니오

json_object_agg_strict( "Any", value "Any") →JSON

JSONB_OBJECT_AGG_STRICT( "Any", value "Any") →JSONB

모든 키/값 쌍을 JSON 객체에 수집합니다. 주요 인수는 텍스트로 강요됩니다. 값 인수는에 따라 변환됩니다.to_json또는TO_JSONB. 그만큼null이 될 수 없습니다. 인 경우valueinull is null이면 입력이 건너 뜁니다.

아니오

json_object_agg_unique( "Any", value "Any") →JSON

jsonb_object_agg_unique( "Any", value "Any") →JSONB

모든 키/값 쌍을 JSON 객체에 수집합니다. 주요 인수는 텍스트로 강요됩니다. 값 인수는에 따라 변환됩니다.to_json또는TO_JSONB. 값은 무일하게 될 수 있지만 키는 할 수 없습니다. 중복 키가 있으면 오류가 발생합니다.

아니오

json_object_agg_unique_strict( "Any", value "Any") →JSON

jsonb_object_agg_unique_strict( "Any", value "Any") →JSONB

모든 키/값 쌍을 JSON 객체에 수집합니다. 주요 인수는 텍스트로 강요됩니다. 값 인수는에 따라 변환됩니다.to_json또는TO_JSONB. 그만큼null이 될 수 없습니다. 인 경우valueNULL이면 입력이 건너 뜁니다. 중복 키가 있으면 오류가 발생합니다.

아니오

max(텍스트 참조) →입력 유형과 동일

널 비 널 입력 값의 최대 값을 계산합니다. 모든 숫자, 문자열, 날짜/시간 또는 열거 유형 및에 사용할 수 있습니다.inet, 간격, Money, OID, PG_LSN, TID, XID8및 이러한 유형의 배열.

Min(텍스트 참조) →입력 유형과 동일

널 비 널 입력 값의 최소값을 계산합니다. 모든 숫자, 문자열, 날짜/시간 또는 열거 유형 및에 사용할 수 있습니다.inet, 간격, Money, OID, PG_LSN, TID, XID8및 이러한 유형의 배열.

Ra토토e_agg33916_33921value AnyRa토토e) →Anymultira토토e

Ra토토e_agg(value Anymultira토토e) →Anymultira토토e

널 비 널 입력 값의 결합을 계산합니다.

아니오

ra토토e_intersect_agg(value AnyRa토토e) →AnyRa토토e

Ra토토e_Intersect_agg(value Anymultira토토e) →Anymultira토토e

널 비 널 입력 값의 교차점을 계산합니다.

아니오

Stri토토_agg(value 텍스트, Delimiter 텍스트) →텍스트

Stri토토_agg(value BYTEA, Delimiter BYTEA 주문 by input_sort_columns) →BYTEA

널이 아닌 입력 값을 문자열로 연결합니다. 첫 번째 이후의 각 값은 해당에 앞서Delimiter(null이 아닌 경우).

Sum(smallint) →bigint

Sum(정수) →bigint

Sum(bigint) →숫자

Sum(숫자) →숫자

Sum(Real) →Real

Sum(이중 정밀도) →이중 정밀도

Sum(간격) →간격

Sum(Money) →Money

널이 아닌 입력 값의 합을 계산합니다.

xmlagg(XML 주문 by input_sort_columns) →XML

NULL XML 입력 값을 연결합니다 (참조섹션 9.15.1.8).

아니오

count,이 함수는 행을 선택할 때 널 값을 반환합니다. 특히,Sum노의 노선은 예상대로 0이 아닌 널을 반환하고array_agg입력 행이 없을 때 빈 배열 대신 NULL을 반환합니다. 그만큼Coalesce필요할 때 널을 0으로 또는 빈 배열을 대체하는 데 기능을 사용할 수 있습니다.

토토 함수array_agg, JSON_AGG, JSONB_AGG, JSON_AGG_STRICT, JSONB_AGG_STRICT, json_object_agg, JSONB_OBJECT_AGG, json_object_agg_strict, JSONB_OBJECT_AGG_STRICT, json_object_agg_unique, jsonb_object_agg_unique, json_object_agg_unique_strict, jsonb_object_agg_unique_strict, Stri토토_aggxmlagg및 유사한 사용자 정의 토토 함수는 입력 값의 순서에 따라 의미있는 다른 결과 값을 생성합니다. 이 순서는 기본적으로 지정되지 않지만 AN을 작성하여 제어 할 수 있습니다.주문 by집계 호출 내의 조항, 다음에 표시된대로섹션 4.2.7. 또는 정렬 된 서브 쿼리에서 입력 값을 공급하는 것이 일반적으로 작동합니다. 예를 들어:

XMLAGG (X)를 선택하여 (Y DESC로 테스트 주문에서 X를 선택) 탭;

외부 쿼리 레벨에 조인과 같은 추가 처리가 포함되어 있으면이 접근법이 실패 할 수 있다고 조심하십시오. 이로 인해 집계가 계산되기 전에 서브 쿼리의 출력을 다시 주문할 수 있기 때문입니다..

Note

부울 집계bool_andandbool_or표준 SQL 토토에 해당Everyandany또는일부. PostgreSQL지원Every, 그러나any또는일부, 표준 구문에 내장 된 모호성이 있기 때문에 :

t1에서 B1 = any ((t2에서 b2를 선택하십시오))를 선택하십시오 ...;

여기Any하위 쿼리가 부울 값으로 한 행을 반환하는 경우 하위 쿼리를 도입하거나 토토 함수로 간주 될 수 있습니다. 따라서이 집계에는 표준 이름이 주어질 수 없습니다.

Note

다른 SQL 데이터베이스 관리 시스템과 협력하는 데 익숙한 사용자는의 성능에 실망 할 수 있습니다count전체 테이블에 적용될 때 토토. 쿼리 :

약간의 count (*)에서 선택할 수 있습니다;

테이블 크기에 비례하는 노력이 필요합니다 :PostgreSQL표에 모든 행을 포함하는 전체 테이블 또는 인덱스 전체를 스캔해야합니다.

표 9.61통계 분석에 일반적으로 사용되는 토토 함수를 보여줍니다. (이들은 더 많은 공동체가 사용하는 집계 목록을 어지럽히는 것을 피하기 위해 분리되어 있습니다.) 함수는 수락하는 것으로 표시됩니다numeric_type모든 유형에 사용할 수 있습니다smallint, Integer, bigint, 숫자, Real이중 정밀도. 설명에 언급 된 위치n모든 경우에, 계산이 의미가 없다면 NULL이 반환됩니다. 예를 들어nis ZERO.

표 9.61. 통계에 대한 토토 함수

기능

설명

부분 모드

corr(y 이중 정밀, x 이중 정밀도) →이중 정밀도

상관 계수를 계산합니다.

covar_pop(y 이중 정밀, x 이중 정밀) →이중 정밀도

인구 공분산 계산.

covar_samp(y 이중 정밀도, x 이중 정밀도) →이중 정밀도

샘플 공분산을 계산합니다.

lect_avgx(y 이중 정밀, x 이중 정밀) →이중 정밀도

독립 변수의 평균을 계산합니다.Sum (x)/n.

lecr_avgy(y 더블 정밀도, x 이중 정밀도) →이중 정밀도

종속 변수의 평균을 계산합니다.Sum (y)/n.

lecc_count(y 이중 정밀도, x 이중 정밀) →bigint

두 입력이 널이 아닌 행의 수를 계산합니다.

후크 _Intercept(y 이중 정밀, x 이중 정밀도) →이중 정밀

(에 의해 결정된 최소 제곱에 맞는 선형 방정식의 y 절편을 계산합니다.x, y) pairs.

후크 _R2(y 이중 정밀, x 이중 정밀) →이중 정밀

상관 계수의 제곱을 계산합니다.

lecc_slope(y 더블 정밀도, x 이중 정밀도) →이중 정밀도

(에 의해 결정된 최소 제곱에 맞는 선형 방정식의 경사를 계산합니다.x, y) 쌍.

lecr_sxx(y 이중 정밀, x 이중 정밀) →이중 정밀

계산사각형의 합독립 변수의Sum (x^2) - Sum (x)^2/n.

juc_sxy(y 이중 정밀도, x 이중 정밀도) →이중 정밀

계산제품의 합계독립 시간 종속 변수,Sum (x*y) - sum (x) * sum (y)/n.

juc_syy(y 이중 정밀도, x 이중 정밀도) →이중 정밀

계산사각형의 합종속 변수의Sum (y^2) - Sum (y)^2/n.

stddev(numeric_type) →이중 정밀forReal또는이중 정밀도, 그렇지 않으면숫자

이것은 역사적 별칭입니다stddev_samp.

stddev_pop(numeric_type) →더블 정밀도forReal또는이중 정밀도, 그렇지 않으면숫자

입력 값의 모집단 표준 편차를 계산합니다.

stddev_samp(numeric_type) →이중 정밀도forReal또는이중 정밀, 그렇지 않으면숫자

입력 값의 샘플 표준 편차를 계산합니다.

분산(numeric_type) →이중 정밀55215_55222Real또는이중 정밀도, 그렇지 않으면숫자

이것은 역사적 별칭입니다var_samp.

var_pop(numeric_type) →이중 정밀도forReal또는더블 정밀도, 그렇지 않으면숫자

입력 값의 모집단 분산을 계산합니다 (모집단 표준 편차의 제곱).

var_samp(numeric_type) →이중 정밀도forReal또는이중 정밀도, 그렇지 않으면숫자

입력 값의 샘플 분산 (샘플 표준 편차의 제곱)을 계산합니다..


표 9.62를 사용하는 일부 토토 함수를 보여줍니다.주문 세트 집계구문. 이러한 기능은 때때로라고도합니다.역 분포함수. 토토 된 입력은에 의해 소개됩니다.주문 by직접 인수그것은 집계되지 않았지만 한 번만 계산됩니다. 이러한 모든 기능은 집계 된 입력의 널 값을 무시합니다. 를 취하는 사람들을 위해fraction매개 변수, 분수 값은 0과 1 사이 여야합니다. 그렇지 않으면 오류가 발생합니다. 그러나 널fraction값은 단순히 널 결과를 생성합니다.

표 9.62. 주문 세트 토토 함수

기능

설명

부분 모드

모드()그룹 내(주문 by Anylement) →Anylement

계산모드, 집계 된 인수의 가장 빈번한 값 (여러 개의 똑같이 똑같은 값이있는 경우 첫 번째를 임의로 선택). 집계 된 인수는 정렬 가능한 유형이어야합니다.

아니오

백분위 수석(fraction 더블 정밀도)그룹 내(주문 by 이중 정밀도) →이중 정밀도

백분위 수석(fraction 이중 정밀)그룹 내(주문 by 간격) →간격

계산연속 백분위 수, 지정된 값fraction순서대로 토토 된 인수 값 세트 내에서. 필요한 경우 인접한 입력 항목 사이에 보간됩니다.

아니오

백분위 수석(FRACTION 이중 정밀 [])그룹 내(주문 by 이중 정밀도) →이중 정밀 []

백분위 수석(FRACTION 이중 정밀 [])그룹 내(주문 by 간격) →interval []

여러 연속 백분위 수를 계산합니다. 결과는와 동일한 치수의 배열입니다.FRACTION매개 변수.

아니오

백분석 _DISC(fraction 이중 정밀)그룹 내(주문 by Anylement) →Anylement

계산이산 백분위 수fraction. 토토 된 인수는 정렬 가능한 유형이어야합니다.

아니오

백분석 _DISC(FRACTION 이중 정밀 [])그룹 내(주문 by Anylement) →AnyArray

여러 이산 백분위 수를 계산합니다. 결과는와 동일한 치수의 배열입니다.fractions매개 변수, 각각이 아닌 요소가 해당 백분위 수에 해당하는 입력 값으로 대체된다. 토토 된 인수는 정렬 가능한 유형이어야합니다.

아니오

각각가상 세트토토에 나열된표 9.63에 정의 된 동일한 이름의 창 함수와 관련이 있습니다PostgreSQL : 문서 : 17 : 9.22. 창 스포츠 토토. 각각의 경우, 집계 결과는 관련 창 함수가에 반환 한 값입니다.가상행으로 구성된 행args, 그러한 행이 |Sorted_args. 이러한 각 기능에 대해에 나와있는 직접 인수 목록argsSorted_args. 대부분의 내장 골재와 달리, 이러한 토토는 엄격하지 않으며, 널이 포함 된 입력 행을 삭제하지 않습니다. null 값은에 지정된 규칙에 따라 정렬됩니다.주문 by절.

표 9.63. 가상 세트 토토 함수

기능

설명

부분 모드

RANK(args)그룹 내(주문 by Sorted_args) →bigint

가상 행의 순위를 차이로 계산합니다. 즉, 피어 그룹의 첫 번째 행의 행 번호입니다.

아니오

Dense_Rank(args)그룹 내(주문 by Sorted_args) →bigint

틈없이 가상 행의 순위를 계산합니다. 이 기능은 효과적으로 동료 그룹을 계산합니다.

아니오

백분율_Rank(args)그룹 내(주문 by Sorted_args) →이중 정밀

가상 행의 상대 순위, 즉 (를 계산합니다.RANK-1) / (총 행 -1). 따라서 값은 0에서 1의 포함됩니다.

아니오

cume_dist(args)그룹 내(주문 by Sorted_args) →이중 정밀도

누적 분포, 즉 (앞의 행 또는 가상 행이있는 피어) / (총 행)를 계산합니다. 따라서 값은 1/입니다.n~ 1

아니오

표 9.64. 그룹화 작업

기능

설명

그룹화(Group_By_Expression (s)) →Integer

어느 것을 나타내는 약간의 마스크를 반환합니다그룹 by표현은 현재 그룹화 세트에 포함되지 않습니다. 비트는 가장 중요하지 않은 비트에 해당하는 가장 오른쪽 인수와 함께 할당됩니다. 해당 표현식이 현재 결과 행을 생성하는 그룹화 세트의 그룹화 기준에 포함 된 경우 각 비트가 0이고, 포함되지 않은 경우 1.


그룹화 작업에 표시된 그룹화표 9.64그룹화 세트와 함께 사용됩니다 (참조섹션 7.2.4) 결과 행을 구별하려면. 에 대한 논쟁그룹화함수는 실제로 평가되지 않지만에 제공된 표현식을 정확하게 일치시켜야합니다.그룹 by관련 쿼리 레벨의 조항. 예를 들어:

= 선택 *에서 items_sold;만들기 | 모델 | 매상
-------+-------+-------
 foo | GT |  10
 foo | 투어 |  20
 바 | 도시 |  15
 바 | 스포츠 |  5
(4 줄)= Make, Model, Grouping (Make, Model), Sum (Sales)을 선택하여 Items_sold Group rollup (Make, Model);를 선택하십시오.만들기 | 모델 | 그룹화 | 합집합
-------+-------+----------+-----
 foo | GT |        0 | 10
 foo | 투어 |        0 | 20
 바 | 도시 |        0 | 15
 바 | 스포츠 |        0 | 5
 foo |       |        1 | 30
 바 |       |        1 | 20
       |       |        3 | 50
(7 줄)

여기,그룹화value0처음 4 개의 행에서는 두 줄이 그룹화 열에 대해 정상적으로 그룹화되었음을 보여줍니다. 값1모델| 다음은 다음 두 행으로 그룹화되지 않았으며 값3만들기NOR모델마지막 행에 그룹화되었습니다 (따라서 모든 입력 행의 집계입니다).

수정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면