彙總函式用於對一組資料進行匯總計算。本文介紹AnalyticDB for MySQL彙總函式的用法與樣本。
AnalyticDB for MySQL支援如下彙總函式:
ARBITRARY:隨機返回一組資料中的任意一個值。
AVG:該函數用於計算平均值。
BIT_AND:返回參數所有位按位AND後的結果。
BIT_OR:返回參數所有位按位OR後的結果。
BIT_XOR:返回參數所有位按位異或後的結果。
COUNT:該函數用於計算記錄數。
MAX:該函數用於計算最大值。
MIN:該函數用於計算最小值。
STD、STDDEV或STDDEV_POP:返回數值的總體標準差。
STDDEV_SAMP:返回一組數值(整數、小數或浮點)的樣本標準差。
SUM:該函數用於計算匯總值。
VARIANCE(非標準SQL函數):返回一組數值(整數、小數或浮點)的總體方差。
VAR_POP(標準SQL函數):返回一組數值(整數、小數或浮點)的總體方差。
VAR_SAMP:返回一組數值(整數、小數或浮點)的樣本方差。
GROUP_CONCAT:該函數用於將
GROUP BY
返回結果中屬於同一個分組的值串連起來,返回一個字串結果。
除GROUP_CONCAT
函數外,本文中的其他彙總函式均以testtable
表為例,建表語句如下:
CREATE TABLE testtable(a INT) DISTRIBUTED BY HASH(a);
已使用如下語句往testtable
表中插入測試資料:
INSERT INTO testtable VALUES (1),(2),(3);
ARBITRARY
arbitrary(x)
命令說明:隨機返回一組資料中的任意一個值。
輸入實值型別:支援輸入任意類型的參數。
傳回值類型:與該函數的輸入實值型別保持一致。
樣本:
SELECT arbitrary(a) FROM testtable;
返回結果如下:
+--------------+ | arbitrary(a) | +--------------+ | 2 | +--------------+
AVG
avg(x)
命令說明:該函數用於計算平均值。
輸入實值型別:BIGINT、DOUBLE或FLOAT。
傳回值類型:DOUBLE。
樣本:
SELECT avg(a) FROM testtable;
返回結果如下:
+--------+ | avg(a) | +--------+ | 2.0 | +--------+
BIT_AND
bit_and(x)
命令說明:返回參數所有位按位
AND
後的結果。輸入實值型別:BIGINT、DOUBLE或FLOAT。
傳回值類型:BIGINT。
樣本:
SELECT bit_and(a) FROM testtable;
返回結果如下:
+------------+ | bit_and(a) | +------------+ | 0 | +------------+
BIT_OR
bit_or(x)
命令說明:返回參數所有位按位
OR
後的結果。輸入實值型別:BIGINT、DOUBLE或FLOAT。
傳回值類型:BIGINT。
樣本:
SELECT bit_or(a) FROM testtable;
返回結果如下:
+-----------+ | bit_or(a) | +-----------+ | 3 | +-----------+
BIT_XOR
bit_xor(x)
命令說明:返回參數所有位按位異或後的結果。
輸入實值型別:BIGINT、DOUBLE或FLOAT。
傳回值類型:BIGINT。
樣本:
SELECT bit_xor(a) FROM testtable;
返回結果如下:
+------------+ | bit_xor(a) | +------------+ | 0 | +------------+
COUNT
count([distinct|all] x)
命令說明:該函數用於計算記錄數。
說明distinct
、all
指明在計數時是否去除重複記錄,預設all
,即返回全部記錄。如果指定distinct
,返回結果只計算唯一值數量。輸入實值型別:數值、字串類型或BOOLEAN類型。
傳回值類型:BIGINT。
樣本:
計算
testtable
中值是唯一的記錄數,語句如下:SELECT count(distinct a) FROM testtable;
返回結果如下:
+-------------------+ | count(distinct a) | +-------------------+ | 3 | +-------------------+
計算
testtable
中所有的記錄數,語句如下:SELECT count(all a) FROM testtable;
返回結果如下:
+--------------+ | count(all a) | +--------------+ | 3 | +--------------+
MAX
max(x)
命令說明:該函數用於計算最大值。
輸入實值型別:該函數支援輸入任意類型的參數,但是BOOLEAN類型的資料不允許參與運算。
說明當列中的值為
NULL
時,該行不參與計算。傳回值類型:與該函數的輸入實值型別保持一致。
樣本:
SELECT max(a) FROM testtable;
返回結果如下:
+--------+ | max(a) | +--------+ | 3 | +--------+
MIN
min(value x)
命令說明:該函數用於計算最小值。
輸入實值型別:該函數支援輸入任意類型的參數,但是BOOLEAN類型的資料不允許參與運算。
說明當列中的值為
NULL
時,該行不參與計算。傳回值類型:與該函數的輸入實值型別保持一致。
樣本:
SELECT min(a) FROM testtable;
返回結果如下:
+--------+ | min(a) | +--------+ | 1 | +--------+
STD、STDDEV或STDDEV_POP
std(x)
stddev(x)
stddev_pop(x)
命令說明:返回數值的總體標準差。
輸入實值型別:BIGINT或DOUBLE。
傳回值類型:DOUBLE。
樣本:
樣本一:
SELECT std(a) FROM testtable;
返回結果如下:
+-------------------+ | std(a) | +-------------------+ | 0.816496580927726 | +-------------------+
樣本二:
SELECT stddev_pop(a) FROM testtable;
返回結果如下:
+-------------------+ | stddev_pop(a) | +-------------------+ | 0.816496580927726 | +-------------------+
STDDEV_SAMP
stddev_samp(x)
命令說明:返回一組數值(整數、小數或浮點)的樣本標準差。
輸入實值型別:BIGINT或DOUBLE。
傳回值類型:DOUBLE。
樣本:
SELECT stddev_samp(a) FROM testtable;
返回結果如下:
+----------------+ | stddev_samp(a) | +----------------+ | 1.0 | +----------------+
SUM
sum(x)
命令說明:該函數用於計算匯總值。
輸入實值型別:BIGINT、DOUBLE或FLOAT。
傳回值類型:BIGINT。
樣本:
SELECT sum(a) FROM testtable;
返回結果如下:
+--------+ | sum(a) | +--------+ | 6 | +--------+
VARIANCE
variance(x)
命令說明:返回一組數值(整數、小數或浮點)的總體標準方差。
說明VARIANCE()
會忽略值為NULL的行。因此若一組數值全為NULL,VARIANCE()
會直接返回NULL。VARIANCE()
函數作為標準SQL的延伸,您也可以使用標準SQL函數VAR_POP()
來代替。
輸入實值型別:BIGINT或DOUBLE。
傳回值類型:DOUBLE。
樣本:
SELECT variance(a) FROM testtable; +----------------------------+ | variance(a) | +----------------------------+ | 0.6666666666666666 |
VAR_POP
var_pop(x)
命令說明:返回一組數值
x
(整數、小數或浮點)的總體標準方差。說明VAR_POP()
會忽略值為NULL的行。因此若一組數值全為NULL,VAR_POP()
會直接返回NULL。也可以使用
VARIANCE()
函數,具有相同的意義,但VARIANCE()
不是標準的SQL函數。
輸入實值型別:BIGINT或DOUBLE。
傳回值類型:DOUBLE。
樣本:
SELECT var_pop(a) FROM testtable;
返回結果如下:
+--------------------+ | var_pop(a) | +--------------------+ | 0.6666666666666666 | +--------------------+
VAR_SAMP
var_samp(x)
命令說明:返回一組數值(整數、小數或浮點)的樣本方差。
輸入實值型別:BIGINT或DOUBLE。
傳回值類型:DOUBLE。
樣本:
SELECT var_samp(a) FROM testtable;
返回結果如下:
+-------------+ | var_samp(a) | +-------------+ | 1.0 | +-------------+
GROUP_CONCAT
GROUP_CONCAT([DISTINCT] col_name
[ORDER BY col_name [ASC | DESC]]
[SEPARATOR str_val])
參數 | 是否必填 | 說明 |
| 選填 | 指定需要去重的列。 |
| 指定需要在分組內部進行排序的列,支援如下排序方式:
若未指定排序方式,預設按照升序排序。 | |
| 指定分組內部各值間的分隔字元。 若未指定分隔字元,預設使用英文逗號(,)分隔。 |
命令說明:該函數用於將
GROUP BY
返回結果中屬於同一個分組的值串連起來,返回一個字串結果。說明僅當需要使用
GROUP_CONCAT
函數進行串連的列中所有取值均為NULL時,才會輸出NULL
。輸入實值型別:字串。
傳回值類型:字串。
樣本
本樣本以
person
表為例介紹如何使用GROUP_CONCAT
函數,person
表建立語句如下:CREATE TABLE person(id INT,name VARCHAR,age INT ) DISTRIBUTED BY HASH(id);
使用如下語句往表中插入資料:
INSERT INTO person VALUES (1,'mary',13),(2,'eva',14),(2,'adam',13),(3,'eva',13),(3,null,13),(3,null,null),(4,null,13),(4,null,null);
現需要根據
id
列進行分組,並通過GROUP_CONCAT
函數將ID相同的name
列展示出來,展示結果時需要對name
列去重,並按照name
列進行降序排序,多個name
列間用#
分隔,語句如下:SELECT id, GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR '#') FROM person GROUP BY id;
返回結果如下:
+------+--------------------------------------------------------------+ | id | GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR '#') | +------+--------------------------------------------------------------+ | 2 | eva#adam | | 1 | mary | | 4 | NULL | | 3 | eva | +------+--------------------------------------------------------------+