대부분의 것과 마찬가지로
기타 관계형 데이터베이스 제품,PostgreSQL윈 토토 함수를 지원합니다. an
윈 토토 함수는 여러 입력에서 단일 결과를 계산합니다
줄. 예를 들어, 계산할 골재가 있습니다.count
, Sum
, avg
(평균),max
(최대) 및Min
(최소) 세트
줄.
예를 들어, 우리는 가장 높은 온도 판독 값을 찾을 수 있습니다. 어디서나
날씨에서 MAX (TEMP_LO)를 선택하십시오;
Max ----- 46 (1 행)
우리가 어떤 도시를 알고 싶다면 (또는 도시) 독서가 발생했을 때 우리는 시도 할 수 있습니다
emp_lo = max (temp_lo); 날씨에서 도시를 선택하십시오.잘못된
그러나 이것은 윈 토토 이후로 작동하지 않습니다max
여기서절. (이 제한은이기 때문에 존재합니다.여기서절은 행을 결정합니다
윈 토토 단계로 들어갑니다. 따라서 평가해야합니다
윈 토토 기능이 계산되기 전에.) 그러나 자주 마찬가지입니다
의도 한 것을 달성하기 위해 쿼리를 다시 사용할 수 있습니다.
결과; 여기에서를 사용하여SubQuery:
날씨에서 도시를 선택하십시오 여기서 temp_lo = (날씨에서 max (temp_lo)를 선택하십시오);
도시 ----------------- 샌프란시스코 (1 행)
하위 선택이 독립적이기 때문에 괜찮습니다 자체 윈 토토를 무엇과 별도로 계산하는 계산 외부 선택에서 일어나고 있습니다.
윈 토토는 또한와 함께 매우 유용합니다그룹 by조항. 예를 들어, 우리는 할 수 있습니다 각 도시에서 관찰 된 최대 저온을
City, Max (Temp_lo) 선택 날씨에서 도시 별 그룹;
도시 | 맥스 ---------------+----- 헤이워드 | 37 샌프란시스코 | 46 (2 줄)
도시 당 하나의 출력 행을 제공합니다. 각 윈 토토 결과 그 도시와 일치하는 테이블 행에 계산됩니다. 우리는 필터링 할 수 있습니다 이 그룹화 된 행을 사용하여:
City, Max (Temp_lo) 선택 날씨에서 도시 별 그룹 Max (temp_lo) <40;
도시 | 맥스 ---------+----- 헤이워드 | 37 (1 행)
이것은 가지고있는 도시에 대해서만 동일한 결과를 제공합니다. 모두temp_lo40 미만의 값. 마지막으로, if 우리는 이름이 시작된 도시에만 관심이 있습니다"S", 우리는 할 수 있습니다
City, Max (Temp_lo) 선택 날씨에서 도시가 's%'를 좋아하는 곳 도시 별 그룹 Max (temp_lo) <40;
사이의 상호 작용을 이해하는 것이 중요합니다 윈 토토 및SQL's여기서and조항. 의 근본적인 차이여기서andis :여기서그룹 및 윈 토토가 계산되기 전에 입력 행을 선택합니다 (따라서 어떤 행이 윈 토토 계산에 들어가는 지 제어합니다), 반면후 그룹 행을 선택합니다 그룹과 윈 토토가 계산됩니다. 따라서여기서조항은 윈 토토 함수를 포함해서는 안됩니다. 윈 토토를 사용하여 어느 쪽을 결정하는 것은 의미가 없습니다. 행은 윈 토토에 입력됩니다. 반면에,조항에는 항상 윈 토토가 포함되어 있습니다 기능. (엄밀히 말하면, 당신은 a를 쓸 수 있습니다.사용하지 않는 조항 응집체이지만 낭비합니다. 같은 조건을 사용할 수 있습니다. 더 효율적으로여기서Stage.)
우리가 도시 이름 제한을 적용 할 수 있는지 관찰하십시오.여기서, 윈 토토가 필요하지 않기 때문입니다. 이것 제한을 추가하는 것보다 더 효율적입니다, 우리는 그룹화를 피하기 때문에 실패하는 모든 행에 대한 윈 토토 계산여기서check.