이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.43토토6463버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

2.7. 사설 토토 함수#

대부분의 다른 관계형 데이터베이스 제품과 마찬가지로,PostgreSQL지원사설 토토 함수. 사설 토토 함수는 여러 입력 행에서 단일 결과를 계산합니다. 예를 들어, 다음을 계산하는 집계가 있습니다.개수, , 평균(평균),최대(최대) 및(최소) 행 집합에 대해.

예를 들어 다음을 통해 어디에서나 가장 높은 저온 판독값을 찾을 수 있습니다.

날씨에서 최대(temp_lo) 선택;
최대
-----
  46
(1행)

독서가 발생한 도시(또는 도시)를 알고 싶다면 다음을 시도할 수 있습니다.

날씨가 있는 도시를 선택하세요. temp_lo = max(temp_lo);-- 틀렸음

그러나 사설 토토 이후에는 작동하지 않습니다.최대다음에서는 사용할 수 없습니다.어디절. (이 제한사항은 다음과 같은 이유로 존재합니다.어디절은 집계 계산에 포함될 행을 결정합니다. 따라서 사설 토토 함수가 계산되기 전에 평가되어야 합니다.) 그러나 종종 그렇듯이 원하는 결과를 얻기 위해 쿼리를 다시 작성할 수 있습니다. 여기서는 다음을 사용합니다.하위 쿼리:

날씨에서 도시를 선택하세요
    WHERE temp_lo = (날씨에서 최대(temp_lo) 선택);
도시
---------------
 샌프란시스코
(1행)

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

집계는 다음과 결합하여 매우 유용합니다.그룹별절. 예를 들어 다음을 사용하여 각 도시에서 관찰된 판독값 수와 최대 최저 기온을 얻을 수 있습니다.

SELECT 도시, 개수(*), 최대(temp_lo)
    날씨로부터
    도시별로 그룹화;
도시 | 카운트 | 최대
---------------+---------+-----
 헤이워드 |     1 |  37
 샌프란시스코 |     2 |  46
(2행)

도시당 하나의 출력 행을 제공합니다. 각 집계 결과는 해당 도시와 일치하는 테이블 행에 대해 계산됩니다. 다음을 사용하여 그룹화된 행을 필터링할 수 있습니다.가지고 있는 중:

SELECT 도시, 개수(*), 최대(temp_lo)
    날씨로부터
    도시별 그룹
    최대(temp_lo) < 40;
도시 | 카운트 | 최대
--------+---------+-----
 헤이워드 |     1 |  37
(1행)

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

SELECT 도시, 개수(*), 최대(temp_lo)
    날씨로부터
    'S%'와 같은 도시 --(1)
    도시별로 그룹화;
도시 | 카운트 | 최대
---------------+---------+-----
 샌프란시스코 |     2 |  46
(1행)

(1)

좋아요연산자는 패턴 일치를 수행하며 설명은 다음에서 설명됩니다.PostgreSQL : 문서 : 개발 : 9.7. 토토 꽁 머니 매칭.

사설 토토와 사설 토토 간의 상호 작용을 이해하는 것이 중요합니다.SQL어디그리고가지고 있는 중절. 의 근본적인 차이점어디그리고가지고 있는 중이것은:어디그룹 및 사설 토토가 계산되기 전에 입력 행을 선택합니다(따라서 사설 토토 계산에 들어갈 행을 제어함).하빙그룹 및 사설 토토가 계산된 후 그룹 행을 선택합니다. 따라서,어디에서절에는 사설 토토 함수가 포함되어서는 안 됩니다. 집계를 사용하여 집계에 대한 입력이 될 행을 결정하는 것은 의미가 없습니다. 반면에가지고 있는 중절에는 항상 사설 토토 함수가 포함됩니다. (엄밀히 말하면 다음과 같이 작성할 수 있습니다.하빙집계를 사용하지 않는 절이지만 거의 유용하지 않습니다. 동일한 조건이 다음에서 더 효율적으로 사용될 수 있습니다.어디단계.)

이전 예에서는 다음에서 도시 이름 제한을 적용할 수 있습니다.어디, 집계가 필요하지 않기 때문입니다. 이는 다음에 제한을 추가하는 것보다 더 효율적입니다.가지고 있는 중, 실패한 모든 행에 대해 그룹화 및 사설 토토 계산을 수행하지 않기 때문입니다.어디에서확인.

집계 계산에 들어갈 행을 선택하는 또 다른 방법은 다음을 사용하는 것입니다.필터, 이는 사설 토토별 옵션입니다.

SELECT 도시, 개수(*) FILTER (WHERE temp_lo < 45), max(temp_lo)
    날씨로부터
    도시별로 그룹화;
도시 | 카운트 | 최대
---------------+---------+-----
 헤이워드 |     1 |  37
 샌프란시스코 |     1 |  46
(2행)

필터거의 비슷함어디, 단, 연결된 특정 사설 토토 함수의 입력에서만 행을 제거한다는 점은 다릅니다. 여기서는개수집계는 다음이 포함된 행만 계산합니다.temp_lo45 미만; 하지만최대사설 토토는 여전히 모든 행에 적용되므로 여전히 46의 판독값을 찾습니다.