대부분의 다른 관계형 데이터베이스 제품과 마찬가지로PostgreSQL지원토토 함수. 토토 함수는 여러 입력 행에서 단일 결과를 계산합니다. 예를 들어, 계산할 골재가 있습니다.count
, Sum
, avg
(평균),max
(최대) 및Min
(최소) 행 세트.
예를 들어, 우리는 어디에서나 가장 높은 온도를 읽을 수 있습니다.
날씨에서 MAX (TEMP_LO)를 선택하십시오;
Max ----- 46 (1 행)
우리가 독서가 어떤 토토 (또는 토토)에서 발생한 토토를 알고 싶다면 다음과 같이 시도 할 수 있습니다.
emp_lo = max (temp_lo); 인 날씨에서 도시를 선택하십시오.잘못된
그러나 이것은 토토 이후로 작동하지 않습니다max
여기서
절. (이 제한은이기 때문에 존재합니다.여기서
조항은 집계 계산에 어떤 행이 포함될 것인지 결정합니다. 따라서 토토 함수가 계산되기 전에 평가해야합니다.) 그러나 종종 쿼리를 사용하여 원하는 결과를 달성하여 A를 사용하여 쿼리를리스트 할 수 있습니다.서브 쿼리:
날씨에서 도시를 선택하십시오 여기서 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_lo
40 미만의 값. 마지막으로, 이름이 시작되는 토토에만 관심이 있다면“S
”, 우리는 할 수 있습니다 :
City, Count (*), Max (temp_lo) 선택 날씨에서 도시가 's%'를 좋아하는 곳 -(1) 토토 별 그룹;
토토 | 카운트 | 맥스 ---------------+-------+----- 샌프란시스코 | 2 | 46 (1 행)
the |
토토와 간의 상호 작용을 이해하는 것이 중요합니다.SQL's여기서
및조항. 의 근본적인 차이
여기서
and이것은 다음과 같습니다.
여기서
그룹 및 토토가 계산되기 전에 입력 행을 선택합니다 (따라서 토토 계산으로 이동하는 행을 제어하는 반면그룹 및 토토가 계산 된 후 그룹 행을 선택하십시오. 따라서
여기서
조항은 골재 함수를 포함해서는 안됩니다. 토토를 사용하여 토토에 입력 할 행을 결정하는 것은 의미가 없습니다. 반면에,절은 항상 토토 함수를 포함합니다. (엄밀히 말하면, 당신은 a를 쓸 수 있습니다.
토토를 사용하지는 않지만 거의 유용하지 않습니다. 동일한 조건이에서 더 효율적으로 사용될 수 있습니다.
여기서
Stage.)
이전 예에서는 토토 이름 제한을 적용 할 수 있습니다여기서
, 토토가 필요하지 않기 때문입니다. 이것은 제한을 추가하는 것보다 더 효율적입니다, 우리는 실패한 모든 행에 대한 그룹화 및 토토 계산을 피하기 때문에
여기서
check.
토토 계산으로 들어가는 행을 선택하는 또 다른 방법필터
, 이는 응집당 옵션입니다 :
City, Count (*) 필터 (여기서 temp_lo <45), max (temp_lo) 날씨에서 도시 별 그룹;
토토 | 카운트 | 맥스 ---------------+-------+----- 헤이워드 | 1 | 37 샌프란시스코 | 1 | 46 (2 줄)
필터
매우 비슷합니다여기서
- 첨부 된 특정 토토 함수의 입력에서만 행을 제거한다는 점을 제외하고. 여기,count
토토 카운트temp_lo
45 미만; 하지만max
토토는 여전히 모든 행에 적용되므로 여전히 46의 읽기를 발견합니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면