文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 BY),則針對 InnoDB 資料表的 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 資料表,因為此儲存引擎會儲存精確的列數,並且可以非常快速地存取。只有在將第一欄定義為 NOT NULL 時,才會對 COUNT(1) 進行相同的最佳化。

  • 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 相同的結果。

    如果沒有相符的列,或如果 exprNULLMAX() 會傳回 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 相同的結果。

    如果沒有相符的列,或如果 exprNULLMIN() 會傳回 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 擴充功能的形式提供。

    如果沒有相符的列,或如果 exprNULLSTD() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • STDDEV(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLSTDDEV() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • STDDEV_POP(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLSTDDEV_POP() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • STDDEV_SAMP(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLSTDDEV_SAMP() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • SUM([DISTINCT] expr) [over_clause]

    傳回 expr 的總和。如果傳回的集合沒有任何列,SUM() 會傳回 NULLDISTINCT 關鍵字可以用來只加總 expr 的相異值。

    如果沒有相符的列,或如果 exprNULLSUM() 會傳回 NULL

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

  • VAR_POP(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLVAR_POP() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • VAR_SAMP(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLVAR_SAMP() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」

  • VARIANCE(expr) [over_clause]

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

    如果沒有相符的列,或如果 exprNULLVARIANCE() 會傳回 NULL

    如果存在 over_clause,此函數會作為視窗函數執行。over_clause 的說明請見 第 14.20.2 節「視窗函數的概念與語法」