文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  彙總函式說明

14.19.1 彙總函式說明

本節說明對值集合進行運算的彙總函式。它們通常與 GROUP BY 子句搭配使用,以將值分組為子集。

表 14.29 彙總函式

名稱 說明
AVG() 傳回引數的平均值
BIT_AND() 傳回位元 AND
BIT_OR() 傳回位元 OR
BIT_XOR() 傳回位元 XOR
COUNT() 傳回傳回的列數計數
COUNT(DISTINCT) 傳回不同值的數目計數
GROUP_CONCAT() 傳回串連的字串
JSON_ARRAYAGG() 以單一 JSON 陣列形式傳回結果集
JSON_OBJECTAGG() 以單一 JSON 物件形式傳回結果集
MAX() 傳回最大值
MIN() 傳回最小值
STD() 傳回母體標準差
STDDEV() 傳回母體標準差
STDDEV_POP() 傳回母體標準差
STDDEV_SAMP() 傳回樣本標準差
SUM() 傳回總和
VAR_POP() 傳回母體標準變異數
VAR_SAMP() 傳回樣本變異數
VARIANCE() 傳回母體標準變異數

除非另有說明,否則彙總函式會忽略 NULL 值。

如果您在不包含 GROUP BY 子句的陳述式中使用彙總函式,則它相當於對所有列進行分組。如需更多資訊,請參閱第 14.19.3 節,「MySQL 的 GROUP BY 處理」

大多數彙總函式可用作視窗函式。那些可以這樣使用的函式會在語法說明中以 [over_clause] 表示,代表選用的 OVER 子句。over_clause 說明於第 14.20.2 節,「視窗函式概念和語法」,其中還包含有關視窗函式用法的其他資訊。

對於數值引數,變異數和標準差函式會傳回 DOUBLE 值。SUM()AVG() 函式會針對精確值引數(整數或 DECIMAL)傳回 DECIMAL 值,並針對近似值引數(FLOATDOUBLE)傳回 DOUBLE 值。

SUM()AVG() 彙總函式不適用於時間值。(它們會將值轉換為數字,遺失第一個非數字字元之後的所有內容。)若要解決此問題,請轉換為數字單位,執行彙總運算,然後轉換回時間值。範例

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

諸如 SUM()AVG() 等預期數值引數的函式會在必要時將引數轉換為數字。對於 SETENUM 值,轉換作業會導致使用基礎數值。

BIT_AND()BIT_OR()BIT_XOR() 聚合函數執行位元運算。

MySQL 位元函數和運算子允許二進位字串型別的引數 (BINARYVARBINARYBLOB 型別),並傳回相同型別的值,這使得它們能夠接受大於 64 位元的引數並產生傳回值。關於位元運算的引數評估和結果型別的討論,請參閱第 14.12 節「位元函數和運算子」中的介紹性討論。

  • AVG([DISTINCT] expr) [over_clause]

    傳回 expr 的平均值。可以使用 DISTINCT 選項來傳回 expr 的相異值的平均值。

    如果沒有符合的列,AVG() 會傳回 NULL。如果 exprNULL,此函數也會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述;它不能與 DISTINCT 一起使用。

    mysql> SELECT student_name, AVG(test_score)
           FROM student
           GROUP BY student_name;
  • BIT_AND(expr) [over_clause]

    傳回 expr 中所有位元的按位 AND 結果。

    結果型別取決於函數引數值是否被評估為二進位字串或數字

    • 當引數值具有二進位字串型別,且引數不是十六進位文字、位元文字或 NULL 文字時,會發生二進位字串評估。否則會發生數值評估,並在必要時將引數值轉換為無號 64 位元整數。

    • 二進位字串評估會產生與引數值長度相同的二進位字串。如果引數值具有不同的長度,則會發生 ER_INVALID_BITWISE_OPERANDS_SIZE 錯誤。如果引數大小超過 511 個位元組,則會發生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 錯誤。數值評估會產生一個無號 64 位元整數。

    如果沒有符合的列,BIT_AND() 會傳回一個中性值(所有位元設定為 1),該值與引數值具有相同的長度。

    NULL 值不會影響結果,除非所有值都是 NULL。在這種情況下,結果是一個中性值,該值與引數值具有相同的長度。

    有關引數評估和結果型別的更多資訊討論,請參閱第 14.12 節「位元函數和運算子」中的介紹性討論。

    如果從 mysql 客戶端內調用 BIT_AND(),二進位字串結果會使用十六進位表示法顯示,具體取決於 --binary-as-hex 的值。有關該選項的更多資訊,請參閱 第 6.5.1 節「mysql — MySQL 命令列客戶端」

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • BIT_OR(expr) [over_clause]

    傳回 expr 中所有位元的按位 OR 結果。

    結果型別取決於函數引數值是否被評估為二進位字串或數字

    • 當引數值具有二進位字串型別,且引數不是十六進位文字、位元文字或 NULL 文字時,會發生二進位字串評估。否則會發生數值評估,並在必要時將引數值轉換為無號 64 位元整數。

    • 二進位字串評估會產生與引數值長度相同的二進位字串。如果引數值具有不同的長度,則會發生 ER_INVALID_BITWISE_OPERANDS_SIZE 錯誤。如果引數大小超過 511 個位元組,則會發生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 錯誤。數值評估會產生一個無號 64 位元整數。

    如果沒有符合的列,BIT_OR() 會傳回一個中性值(所有位元設定為 0),該值與引數值具有相同的長度。

    NULL 值不會影響結果,除非所有值都是 NULL。在這種情況下,結果是一個中性值,該值與引數值具有相同的長度。

    有關引數評估和結果型別的更多資訊討論,請參閱第 14.12 節「位元函數和運算子」中的介紹性討論。

    如果從 mysql 客戶端內調用 BIT_OR(),二進位字串結果會使用十六進位表示法顯示,具體取決於 --binary-as-hex 的值。有關該選項的更多資訊,請參閱 第 6.5.1 節「mysql — MySQL 命令列客戶端」

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • BIT_XOR(expr) [over_clause]

    傳回 expr 中所有位元的按位 XOR 結果。

    結果型別取決於函數引數值是否被評估為二進位字串或數字

    • 當引數值具有二進位字串型別,且引數不是十六進位文字、位元文字或 NULL 文字時,會發生二進位字串評估。否則會發生數值評估,並在必要時將引數值轉換為無號 64 位元整數。

    • 二進位字串評估會產生與引數值長度相同的二進位字串。如果引數值具有不同的長度,則會發生 ER_INVALID_BITWISE_OPERANDS_SIZE 錯誤。如果引數大小超過 511 個位元組,則會發生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 錯誤。數值評估會產生一個無號 64 位元整數。

    如果沒有符合的列,BIT_XOR() 會傳回一個中性值(所有位元設定為 0),該值與引數值具有相同的長度。

    NULL 值不會影響結果,除非所有值都是 NULL。在這種情況下,結果是一個中性值,該值與引數值具有相同的長度。

    有關引數評估和結果型別的更多資訊討論,請參閱第 14.12 節「位元函數和運算子」中的介紹性討論。

    如果從 mysql 客戶端內調用 BIT_XOR(),二進位字串結果會使用十六進位表示法顯示,具體取決於 --binary-as-hex 的值。有關該選項的更多資訊,請參閱 第 6.5.1 節「mysql — MySQL 命令列客戶端」

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • COUNT(expr) [over_clause]

    傳回 SELECT 語句檢索的列中,expr 的非 NULL 值的計數。結果是一個 BIGINT 值。

    如果沒有符合的列,COUNT() 會傳回 0COUNT(NULL) 會傳回 0。

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

    mysql> SELECT student.student_name,COUNT(*)
           FROM student,course
           WHERE student.student_id=course.student_id
           GROUP BY student_name;

    COUNT(*) 有點不同,它會傳回檢索的列數,無論它們是否包含 NULL 值。

    對於諸如 InnoDB 等交易式儲存引擎,儲存精確的列數是一個問題。可能會同時發生多個交易,每個交易都可能影響計數。

    InnoDB 不會保留資料表中列的內部計數,因為並行交易可能會在同一時間 看到不同的列數。因此,SELECT COUNT(*) 語句只會計算目前交易可見的列。

    如果沒有額外的子句,例如 WHEREGROUP BYInnoDB 資料表的 SELECT COUNT(*) FROM tbl_name 查詢效能會針對單執行緒工作負載進行最佳化。

    InnoDB 會透過遍歷可用的最小輔助索引來處理 SELECT COUNT(*) 語句,除非索引或最佳化器提示指示最佳化器使用不同的索引。如果不存在輔助索引,InnoDB 會透過掃描叢集索引來處理 SELECT COUNT(*) 語句。

    如果索引記錄並非完全在緩衝池中,處理 SELECT COUNT(*) 語句會需要一些時間。為了更快地計數,請建立一個計數器資料表,並讓您的應用程式根據它執行的插入和刪除來更新它。然而,當數千個並行交易正在啟動對同一個計數器資料表的更新時,此方法可能無法良好地擴展。如果近似的列數已足夠,請使用 SHOW TABLE STATUS

    InnoDB 以相同的方式處理 SELECT COUNT(*)SELECT COUNT(1) 操作。沒有效能上的差異。

    對於 MyISAM 資料表,如果 SELECT 從一個資料表檢索、沒有檢索其他欄,且沒有 WHERE 子句,則會最佳化 COUNT(*) 以非常快速地傳回。例如

    mysql> SELECT COUNT(*) FROM student;

    此最佳化僅適用於 MyISAM 資料表,因為會為此儲存引擎儲存精確的列數,並且可以非常快速地存取。COUNT(1) 只有在第一欄定義為 NOT NULL 時才會受到相同的最佳化。

  • COUNT(DISTINCT expr,[expr...])

    傳回具有不同非 NULL expr 值的列數。

    如果沒有符合的列,COUNT(DISTINCT) 會傳回 0

    mysql> SELECT COUNT(DISTINCT results) FROM student;

    在 MySQL 中,您可以透過給定一個運算式清單來取得不包含 NULL 的相異運算式組合的數量。在標準 SQL 中,您必須在 COUNT(DISTINCT ...) 內連接所有運算式。

  • GROUP_CONCAT(expr)

    此函數傳回一個字串結果,其中包含來自群組的串連非 NULL 值。如果沒有非 NULL 值,它會傳回 NULL。完整語法如下

    GROUP_CONCAT([DISTINCT] expr [,expr ...]
                 [ORDER BY {unsigned_integer | col_name | expr}
                     [ASC | DESC] [,col_name ...]]
                 [SEPARATOR str_val])
    mysql> SELECT student_name,
             GROUP_CONCAT(test_score)
           FROM student
           GROUP BY student_name;

    mysql> SELECT student_name,
             GROUP_CONCAT(DISTINCT test_score
                          ORDER BY test_score DESC SEPARATOR ' ')
           FROM student
           GROUP BY student_name;

    在 MySQL 中,您可以取得運算式組合的串連值。若要排除重複值,請使用 DISTINCT 子句。若要對結果中的值進行排序,請使用 ORDER BY 子句。若要以相反的順序排序,請將 DESC(遞減)關鍵字新增至您正在排序的欄的名稱中,在 ORDER BY 子句中。預設為遞增順序;可以使用 ASC 關鍵字明確指定。群組中值之間的預設分隔符號是逗號 (,)。若要明確指定分隔符號,請使用 SEPARATOR,後接應該插入群組值之間的字串文字值。若要完全排除分隔符號,請指定 SEPARATOR ''

    結果會被截斷至系統變數 group_concat_max_len 所指定的最大長度,其預設值為 1024。此值可以設定得更高,但回傳值的有效最大長度會受到 max_allowed_packet 的值所限制。在執行階段變更 group_concat_max_len 值的語法如下,其中 val 為不帶正負號的整數。

    SET [GLOBAL | SESSION] group_concat_max_len = val;

    回傳值為非二進位或二進位字串,取決於引數是否為非二進位或二進位字串。結果類型為 TEXTBLOB,除非 group_concat_max_len 小於或等於 512,在這種情況下,結果類型為 VARCHARVARBINARY

    如果從 mysql 用戶端內調用 GROUP_CONCAT(),二進位字串結果會使用十六進位表示法顯示,取決於 --binary-as-hex 的值。如需該選項的詳細資訊,請參閱 第 6.5.1 節,「mysql — MySQL 命令列用戶端」

    另請參閱 CONCAT()CONCAT_WS()第 14.8 節,「字串函數和運算符」

  • JSON_ARRAYAGG(col_or_expr) [over_clause]

    將結果集匯總為單一的 JSON 陣列,其元素由各列組成。此陣列中元素的順序未定義。此函數作用於欄位或評估為單一值的表達式。如果結果不包含任何列或發生錯誤,則傳回 NULL。如果 col_or_exprNULL,則函數會傳回 JSON [null] 元素陣列。

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

    mysql> SELECT o_id, attribute, value FROM t3;
    +------+-----------+-------+
    | o_id | attribute | value |
    +------+-----------+-------+
    |    2 | color     | red   |
    |    2 | fabric    | silk  |
    |    3 | color     | green |
    |    3 | shape     | square|
    +------+-----------+-------+
    4 rows in set (0.00 sec)
    
    mysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes
        -> FROM t3 GROUP BY o_id;
    +------+---------------------+
    | o_id | attributes          |
    +------+---------------------+
    |    2 | ["color", "fabric"] |
    |    3 | ["color", "shape"]  |
    +------+---------------------+
    2 rows in set (0.00 sec)
  • JSON_OBJECTAGG(key, value) [over_clause]

    接受兩個欄位名稱或表達式作為引數,第一個用作鍵,第二個用作值,並傳回包含鍵值對的 JSON 物件。如果結果不包含任何列或發生錯誤,則傳回 NULL。如果任何鍵名稱為 NULL 或引數數量不等於 2,則會發生錯誤。

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

    mysql> SELECT o_id, attribute, value FROM t3;
    +------+-----------+-------+
    | o_id | attribute | value |
    +------+-----------+-------+
    |    2 | color     | red   |
    |    2 | fabric    | silk  |
    |    3 | color     | green |
    |    3 | shape     | square|
    +------+-----------+-------+
    4 rows in set (0.00 sec)
    
    mysql> SELECT o_id, JSON_OBJECTAGG(attribute, value)
        -> FROM t3 GROUP BY o_id;
    +------+---------------------------------------+
    | o_id | JSON_OBJECTAGG(attribute, value)      |
    +------+---------------------------------------+
    |    2 | {"color": "red", "fabric": "silk"}    |
    |    3 | {"color": "green", "shape": "square"} |
    +------+---------------------------------------+
    2 rows in set (0.00 sec)

    重複鍵處理。當此函數的結果正規化時,具有重複鍵的值將被捨棄。根據不允許重複鍵的 MySQL JSON 資料類型規範,只有遇到的最後一個值才會在傳回的物件中與該鍵一起使用(最後一個重複鍵獲勝)。這表示從 SELECT 欄位中使用此函數的結果可能取決於傳回列的順序,而這無法保證。

    當用作視窗函數時,如果框架內存在重複鍵,則結果中僅會出現該鍵的最後一個值。如果 ORDER BY 規格保證這些值具有特定的順序,則來自框架中最後一列的鍵值是確定的。否則,鍵的結果值是不確定的。

    考慮以下情況

    mysql> CREATE TABLE t(c VARCHAR(10), i INT);
    Query OK, 0 rows affected (0.33 sec)
    
    mysql> INSERT INTO t VALUES ('key', 3), ('key', 4), ('key', 5);
    Query OK, 3 rows affected (0.10 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> SELECT c, i FROM t;
    +------+------+
    | c    | i    |
    +------+------+
    | key  |    3 |
    | key  |    4 |
    | key  |    5 |
    +------+------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT JSON_OBJECTAGG(c, i) FROM t;
    +----------------------+
    | JSON_OBJECTAGG(c, i) |
    +----------------------+
    | {"key": 5}           |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> DELETE FROM t;
    Query OK, 3 rows affected (0.08 sec)
    
    mysql> INSERT INTO t VALUES ('key', 3), ('key', 5), ('key', 4);
    Query OK, 3 rows affected (0.06 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> SELECT c, i FROM t;
    +------+------+
    | c    | i    |
    +------+------+
    | key  |    3 |
    | key  |    5 |
    | key  |    4 |
    +------+------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT JSON_OBJECTAGG(c, i) FROM t;
    +----------------------+
    | JSON_OBJECTAGG(c, i) |
    +----------------------+
    | {"key": 4}           |
    +----------------------+
    1 row in set (0.00 sec)

    從最後一個查詢中選取的鍵是不確定的。如果查詢未使用 GROUP BY(通常會強制實施自己的排序),並且您偏好特定的鍵排序,您可以透過包含帶有 ORDER BY 規格的 OVER 子句,將 JSON_OBJECTAGG() 作為視窗函數調用,以便對框架列強制執行特定的順序。以下範例顯示在一些不同的框架規格中使用和不使用 ORDER BY 時會發生什麼情況。

    不使用 ORDER BY,框架為整個分割區

    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER () AS json_object FROM t;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 4}  |
    | {"key": 4}  |
    | {"key": 4}  |
    +-------------+

    使用 ORDER BY,其中框架為預設的 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(升冪和降冪排序)

    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER (ORDER BY i) AS json_object FROM t;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 3}  |
    | {"key": 4}  |
    | {"key": 5}  |
    +-------------+
    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER (ORDER BY i DESC) AS json_object FROM t;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 5}  |
    | {"key": 4}  |
    | {"key": 3}  |
    +-------------+

    使用 ORDER BY 和整個分割區的明確框架

    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER (ORDER BY i
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
            AS json_object
           FROM t;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 5}  |
    | {"key": 5}  |
    | {"key": 5}  |
    +-------------+

    若要傳回特定的鍵值(例如最小或最大值),請在適當的查詢中加入 LIMIT 子句。例如

    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER (ORDER BY i) AS json_object FROM t LIMIT 1;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 3}  |
    +-------------+
    mysql> SELECT JSON_OBJECTAGG(c, i)
           OVER (ORDER BY i DESC) AS json_object FROM t LIMIT 1;
    +-------------+
    | json_object |
    +-------------+
    | {"key": 5}  |
    +-------------+

    如需其他資訊和範例,請參閱JSON 值的正規化、合併和自動包裝

  • MAX([DISTINCT] expr) [over_clause]

    傳回 expr 的最大值。MAX() 可能會採用字串引數;在這種情況下,它會傳回最大字串值。請參閱第 10.3.1 節,「MySQL 如何使用索引」。可以使用 DISTINCT 關鍵字來尋找 expr 的相異值的最大值,但是,這會產生與省略 DISTINCT 相同的結果。

    如果沒有符合的列,或者如果 exprNULL,則 MAX() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述;它不能與 DISTINCT 一起使用。

    mysql> SELECT student_name, MIN(test_score), MAX(test_score)
           FROM student
           GROUP BY student_name;

    對於 MAX(),MySQL 目前會根據字串值而非字串在集合中的相對位置來比較 ENUMSET 欄。這與 ORDER BY 比較它們的方式不同。

  • MIN([DISTINCT] expr) [over_clause]

    傳回 expr 的最小值。MIN() 可能會採用字串引數;在這種情況下,它會傳回最小字串值。請參閱第 10.3.1 節,「MySQL 如何使用索引」。可以使用 DISTINCT 關鍵字來尋找 expr 的相異值的最小值,但是,這會產生與省略 DISTINCT 相同的結果。

    如果沒有符合的列,或者如果 exprNULL,則 MIN() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述;它不能與 DISTINCT 一起使用。

    mysql> SELECT student_name, MIN(test_score), MAX(test_score)
           FROM student
           GROUP BY student_name;

    對於 MIN(),MySQL 目前會根據字串值而非字串在集合中的相對位置來比較 ENUMSET 欄。這與 ORDER BY 比較它們的方式不同。

  • STD(expr) [over_clause]

    傳回 expr 的母體標準差。STD() 是標準 SQL 函數 STDDEV_POP() 的同義詞,作為 MySQL 擴充功能提供。

    如果沒有符合的列,或者如果 exprNULL,則 STD() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • STDDEV(expr) [over_clause]

    傳回 expr 的母體標準差。STDDEV() 是標準 SQL 函數 STDDEV_POP() 的同義詞,為了與 Oracle 相容而提供。

    如果沒有符合的列,或者如果 exprNULL,則 STDDEV() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • STDDEV_POP(expr) [over_clause]

    傳回 expr 的母體標準差(VAR_POP() 的平方根)。您也可以使用 STD()STDDEV(),它們是等效的,但不是標準 SQL。

    如果沒有符合的列,或者如果 exprNULL,則 STDDEV_POP() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • STDDEV_SAMP(expr) [over_clause]

    傳回 expr 的樣本標準差(VAR_SAMP() 的平方根)。

    如果沒有符合的列,或者如果 exprNULL,則 STDDEV_SAMP() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • SUM([DISTINCT] expr) [over_clause]

    傳回 expr 的總和。如果傳回集合沒有列,則 SUM() 會傳回 NULL。可以使用 DISTINCT 關鍵字來僅加總 expr 的相異值。

    如果沒有符合的列,或者如果 exprNULL,則 SUM() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述;它不能與 DISTINCT 一起使用。

  • VAR_POP(expr) [over_clause]

    傳回 expr 的母體標準變異數。它將各列視為整體母體,而非樣本,因此它以列數作為分母。您也可以使用 VARIANCE(),它是等效的,但不是標準 SQL。

    如果沒有符合的列,或者如果 exprNULL,則 VAR_POP() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • VAR_SAMP(expr) [over_clause]

    傳回 expr 的樣本變異數。也就是說,分母為列數減一。

    如果沒有符合的列,或者如果 exprNULL,則 VAR_SAMP() 會傳回 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。

  • VARIANCE(expr) [over_clause]

    傳回 expr 的母體標準變異數。VARIANCE() 是標準 SQL 函數 VAR_POP() 的同義詞,作為 MySQL 擴充功能提供。

    如果沒有符合的資料列,或者 exprNULL,則 VARIANCE() 會回傳 NULL

    如果存在 over_clause,則此函數會作為視窗函數執行。over_clause第 14.20.2 節「視窗函數的概念和語法」中所述。