OceanBase 聚合函数

2021-06-09 15:45 更新

聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与​SELECT语句的 GROUP BY 子句一同使用。

所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。

在 OceanBase 数据库的聚合函数中,Value 表达式只能出现一个。例如:不支持 ​COUNT(c1, c2)​,仅支持​COUNT(c1)​。

AVG

声明

AVG(([DISTINCT] expr)

说明

返回指定组中的平均值,空值被忽略。​DISTINCT​ 选项可用于返回 expr 的不同值的平均值。若找不到匹配的行,则 ​AVG()​ 返回 NULL。

例子

obclient> select * from oceanbasetest;
+----+------+------+
| id | ip   | ip2  |
+----+------+------+
|  1 |    4 | NULL |
|  3 |    3 | NULL |
|  4 |    3 | NULL |
+----+------+------+
3 rows in set (0.01 sec)

obclient> select avg(ip2), avg(ip), avg(distinct(ip)) from oceanbasetest;
+----------+---------+-------------------+
| avg(ip2) | avg(ip) | avg(distinct(ip)) |
+----------+---------+-------------------+
|     NULL |  3.3333 |            3.5000 |
+----------+---------+-------------------+
1 row in set (0.00 sec)

obclient> select avg(distinct(ip)),avg(ip),avg(ip2) from oceanbasetest;
+-------------------+---------+----------+
| avg(distinct(ip)) | avg(ip) | avg(ip2) |
+-------------------+---------+----------+
|            3.5000 |  3.3333 |     NULL |
+-------------------+---------+----------+
1 row in set (0.00 sec)

COUNT

声明

COUNT([DISTINCT] expr)

说明

该函数返回 ​SELECT​ 语句检索到的行中非 NULL 值的数目。若找不到匹配的行,则 ​COUNT()​ 返回 0。​DISTINCT​ 选项可用于返回 ​expr​ 的不同值的数目。

COUNT(*)​ 的稍微不同之处在于,它返回检索行的数目,不论其是否包含 NULL 值。

例子

obclient> select * from oceanbasetest;
+----+------+------+
| id | ip   | ip2  |
+----+------+------+
|  1 |    4 | NULL |
|  3 |    3 | NULL |
|  4 |    3 | NULL |
+----+------+------+
3 rows in set (0.00 sec)

obclient> select count(ip2), count(ip), count(distinct(ip)), count(*) from oceanbasetest;
+------------+-----------+---------------------+----------+
| count(ip2) | count(ip) | count(distinct(ip)) | count(*) |
+------------+-----------+---------------------+----------+
|          0 |         3 |                   2 |        3 |
+------------+-----------+---------------------+----------+
1 row in set (0.00 sec)

MAX

声明

MAX([DISTINCT] expr)

说明

返回指定数据中的最大值。

MAX()​ 的取值可以是一个字符串参数,在这些情况下,它们返回最大字符串值。​DISTINCT​ 关键字可以被用来查找 ​expr​ 的不同值的最大值,这产生的结果与省略 ​DISTINCT​ 的结果相同。

假设表 a 有三行数据:id=1,num=10;id=2,num=20;id=3,num=30。

例子

obclient> SELECT MAX(num) FROM a;
+-----------------+
| MAX(num)        |
+-----------------+
|              30 |
+-----------------+
1 row in set (0.00 sec)

MIN

声明

MIN([DISTINCT] expr)

说明

返回指定数据中的最小值。

MIN()​ 的取值可以是一个字符串参数,在这些情况下,它们返回最小字符串值。​DISTINCT​ 关键字可以被用来查找​ expr ​的不同值的最小值,然而,这产生的结果与省略 ​DISTINCT ​的结果相同。

假设表 a 有三行数据:id=1,num=10;id=2,num=20;id=3,num=30。

例子

obclient> SELECT MIN(num) FROM a;
+----------------+
| MIN(num)       |
+----------------+
|             10 |
+----------------+
1 row in set (0.00 sec)

SUM

声明

SUM([DISTINCT] expr)

说明

返回 expr 的总数。若返回集合中无任何行,则 ​SUM() ​返回 NULL。​DISTINCT​ 关键字可用于求得 ​expr​ 不同值的总和。

若找不到匹配的行,则 ​SUM()​ 返回 NULL。

例子

obclient> select * from oceanbasetest;
+------+------+------+
| id   | ip   | ip2  |
+------+------+------+
|    1 |    4 | NULL |
|    3 |    3 | NULL |
|    4 |    3 | NULL |
+------+------+------+
3 rows in set (0.00 sec)

obclient> select sum(ip2),sum(ip),sum(distinct(ip)) from oceanbasetest;
+----------+---------+-------------------+
| sum(ip2) | sum(ip) | sum(distinct(ip)) |
+----------+---------+-------------------+
|     NULL |      10 |                 7 |
+----------+---------+-------------------+
1 row in set (0.00 sec)

GROUP_CONCAT

声明

GROUP_CONCAT([DISTINCT] expr)

说明

该函数返回带有来自一个组的连接的非 NULL 值的字符串结果。

GROUP_CONCAT([DISTINCT] expr [,expr ...]
    [ORDER BY {unsigned_integer | col_name | expr}
     ASC | DESC]
    [SEPARATOR str_val])

例子

obclient> select * from book;     //表book(书编号,书名,出版社)
+--------+--------------------------------+-----------------------------+
| bookid | bookname                       | publishname                 |
+--------+--------------------------------+-----------------------------+
|      1 | git help                       | alibaba group publisher     |
|      2 | MySQL性能优化                  | 浙江大学图文出版社          |
|      3 | JAVA编程指南                   | 机械工业出版社              |
|      3 | JAVA编程指南                   | 机械工业出版社              |
|      4 | 大规模分布式存储系统           | 机械工业出版社              |
+--------+--------------------------------+-----------------------------+
5 rows in set (0.00 sec)    

//查找书名信息
obclient> select group_concat(bookname) from book group by bookname;
+-----------------------------------+
| group_concat(bookname)            |
+-----------------------------------+
| git help                          |
| JAVA编程指南,JAVA编程指南         |
| MySQL性能优化                     |
| 大规模分布式存储系统              |
+-----------------------------------+
4 rows in set (0.00 sec)

//查找书名信息,书名唯一
obclient> select group_concat(distinct(bookname)) from book group by bookname;
+----------------------------------+
| group_concat(distinct(bookname)) |
+----------------------------------+
| git help                         |
| JAVA编程指南                     |
| MySQL性能优化                    |
| 大规模分布式存储系统             |
+----------------------------------+
4 rows in set (0.01 sec)    

//查找书名和出版社信息,以书名分组,出版社信息降序排序显示
obclient> select bookname, group_concat(publishname order by publishname desc separator  ';' ) from book group by bookname;
+--------------------------------+---------------------------------------------------------------------+
| bookname                       | group_concat(publishname order by publishname desc separator  ';' ) |
+--------------------------------+---------------------------------------------------------------------+
| git help                       | alibaba group publisher                                             |
| JAVA编程指南                   | 机械工业出版社;机械工业出版社                                       |
| MySQL性能优化                  | 浙江大学图文出版社                                                  |
| 大规模分布式存储系统           | 机械工业出版社                                                      |
+--------------------------------+---------------------------------------------------------------------+
4 rows in set (0.00 sec)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号