<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 2.7\. 聚集函數 和大多數其它關系數據庫產品一樣,PostgreSQL支持_聚集函數_。 一個聚集函數從多個輸入行中計算出一個結果。比如,我們有在一個行集合上計算`count`(數目), `sum`(總和),`avg`(均值),`max`(最大值), `min`(最小值)的函數。 比如,我們可以用下面的語句找出所有低溫中的最高溫度: ``` SELECT max(temp_lo) FROM weather; ``` ``` max ----- 46 (1 row) ``` 如果我們想知道該讀數發生在哪個城市,可能會用: ``` SELECT city FROM weather WHERE temp_lo = max(temp_lo); _錯誤_ ``` 不過這個方法不能運轉,因為聚集函數`max`不能用于`WHERE` 子句中。存在這個限制是因為`WHERE`子句決定哪些行可以進入聚集階段; 因此它必需在聚集函數之前計算。不過,我們可以用其它方法實現這個目的; 這里我們使用_子查詢_: ``` SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather); ``` ``` city --------------- San Francisco (1 row) ``` 這樣做是可以的,因為子查詢是一次獨立的計算,它獨立于外層查詢計算自己的聚集。 聚集同樣也常用于 `GROUP BY`子句。比如,我們可以獲取每個城市低溫的最高值: ``` SELECT city, max(temp_lo) FROM weather GROUP BY city; ``` ``` city | max ---------------+----- Hayward | 37 San Francisco | 46 (2 rows) ``` 這樣每個城市一個輸出。每個聚集結果都是在匹配該城市的行上面計算的。 我們可以用`HAVING`過濾這些分組: ``` SELECT city, max(temp_lo) FROM weather GROUP BY city HAVING max(temp_lo) < 40; ``` ``` city | max ---------+----- Hayward | 37 (1 row) ``` 這樣就只給出那些`temp_lo`值曾經有低于 40 度的城市。最后, 如果我們只關心那些名字以"`S`"開頭的城市,我們可以用: ``` SELECT city, max(temp_lo) FROM weather WHERE city LIKE 'S%'<a name="CO.TUTORIAL-AGG-LIKE">**(1)**</a> GROUP BY city HAVING max(temp_lo) < 40; ``` [**(1)**](#calibre_link-1399) 語句中的`LIKE`執行模式匹配,在[Section 9.7](#calibre_link-1400)里有解釋。 理解聚集和SQL的`WHERE`和`HAVING` 子句之間的關系非常重要。`WHERE`和`HAVING`的基本區別如下: `WHERE`在分組和聚集計算之前選取輸入行(它控制哪些行進入聚集計算), 而`HAVING`在分組和聚集之后選取輸出行。因此,`WHERE` 子句不能包含聚集函數;因為試圖用聚集函數判斷那些行將要輸入給聚集運算是沒有意義的。 相反,`HAVING`子句總是包含聚集函數。當然,你可以寫不使用聚集的`HAVING` 子句,但這樣做沒什么好處,因為同樣的條件用在`WHERE`階段會更有效。 在前面的例子里,我們可以在`WHERE`里應用城市名稱限制,因為它不需要聚集。 這樣比在`HAVING`里增加限制更加高效,因為我們避免了為那些未通過 `WHERE`檢查的行進行分組和聚集計算。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看