2.7. 롤 토토 기능

대부분의 다른 관계형 데이터베이스 제품과 마찬가지로PostgreSQL지원롤 토토 함수. 롤 토토 함수는 여러 입력 행에서 단일 결과를 계산합니다. 예를 들어, 계산할 골재가 있습니다.count, Sum, avg(평균),max(최대) 및Min(최소) 행 세트.

예를 들어, 우리는 다음과 같이 어디에서나 가장 높은 온도 읽기를 찾을 수 있습니다.

날씨에서 MAX (TEMP_LO)를 선택하십시오;
MAX
-----
  46
(1 행)

우리가 그 독서가 어떤 도시 (또는 도시)에서 발생한 도시를 알고 싶다면 : 우리는 시도 할 수 있습니다.

emp_lo = max (temp_lo); 날씨에서 도시를 선택하십시오.잘못된

그러나 이것은 롤 토토 이후로 작동하지 않습니다max여기서절. (이 제한은이기 때문에 존재합니다.여기서조항은 집계 계산에 어떤 행이 포함될 것인지 결정합니다. 따라서 롤 토토 함수가 계산되기 전에 평가해야합니다.) 그러나 종종 쿼리를 사용하여 원하는 결과를 달성하여 A를 사용하여 쿼리를리스트 할 수 있습니다.SubQuery:

날씨에서 도시를 선택하십시오
    여기서 temp_lo = (날씨에서 max (temp_lo)를 선택하십시오);
도시
-----------------
 샌프란시스코
(1 행)

하위 쿼리는 외부 쿼리에서 발생하는 일과 별도로 자체 롤 토토를 계산하는 독립적 인 계산이기 때문에 괜찮습니다..

롤 토토는 또한와 함께 매우 유용합니다그룹 by조항. 예를 들어, 우리는 각 도시에서 다음과 같이 관찰되는 최대 저온 및 최대 저온을 얻을 수 있습니다.

City, Count (*), Max (temp_lo) 선택
    날씨에서
    도시 별 그룹;
도시 | 카운트 | 맥스
---------------+-------+-----
 헤이워드 |     1 |  37
 샌프란시스코 |     2 |  46
(2 줄)

도시 당 하나의 출력 행을 제공합니다. 각 롤 토토 결과는 해당 도시와 일치하는 테이블 행을 통해 계산됩니다. 우리는이 그룹화 된 행을 사용하여 필터링 할 수 있습니다:

City, Count (*), Max (temp_lo) 선택
    날씨에서
    도시 별 그룹
    Max (temp_lo) <40;
도시 | 카운트 | 맥스
--------+-------+-----
 헤이워드 |     1 |  37
(1 행)

모든 도시가있는 도시에 대해서만 동일한 결과를 제공합니다temp_lo40 미만의 값. 마지막으로, 이름이 시작되는 도시에만 관심이 있다면S, 우리는 할 수 있습니다 :

City, Count (*), Max (temp_lo) 선택
    날씨에서
    도시가 's%'를 좋아하는 곳 -(1)
    도시 별 그룹;
도시 | 카운트 | 맥스
---------------+-------+-----
 샌프란시스코 |     2 |  46
(1 행)

(1)

the좋아요운영자는 패턴 일치하고에 설명되어 있습니다.PostgreSQL : 문서 : 15 : 9.7. 사설 토토 매칭.

롤 토토와 간의 상호 작용을 이해하는 것이 중요합니다.SQL's여기서and조항. 의 근본적인 차이여기서and이것은 다음과 같습니다.여기서그룹 및 롤 토토가 계산되기 전에 입력 행을 선택합니다 (따라서 롤 토토 계산으로 이동하는 행을 제어하는 반면그룹 및 롤 토토가 계산 된 후 그룹 행을 선택합니다. 따라서여기서조항은 골재 함수를 포함해서는 안됩니다. 롤 토토를 사용하여 롤 토토에 입력 할 행을 결정하는 것은 의미가 없습니다. 반면에,절은 항상 롤 토토 함수를 포함합니다. (엄밀히 말하면, 당신은 a를 쓸 수 있습니다.롤 토토를 사용하지는 않지만 거의 유용하지 않습니다. 동일한 조건이에서 더 효율적으로 사용될 수 있습니다.여기서Stage.)

이전 예에서는 도시 이름 제한을 적용 할 수 있습니다여기서, 롤 토토가 필요하지 않기 때문입니다. 이것은 제한을 추가하는 것보다 더 효율적입니다, 우리는 실패한 모든 행에 대한 그룹화 및 롤 토토 계산을 피하기 때문에여기서check.

롤 토토 계산으로 들어가는 행을 선택하는 또 다른 방법필터, 이는 응집당 옵션입니다 :

City, Count (*) 필터 (여기서 temp_lo <45), max (temp_lo)
    날씨에서
    도시 별 그룹;
도시 | 카운트 | 맥스
---------------+-------+-----
 헤이워드 |     1 |  37
 샌프란시스코 |     1 |  46
(2 줄)

필터여기서- 첨부 된 특정 롤 토토 함수의 입력에서만 행을 제거한다는 점을 제외하고. 여기,count롤 토토 카운트temp_lo45 미만; 하지만max롤 토토는 여전히 모든 행에 적용되므로 여전히 46의 읽기를 발견합니다.

정정 제출

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