暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss 聚集与分组操作

openGauss小助手 2021-10-23
143

聚集与分组操作,如表2-9所示。

表2-9 聚集与分组操作说明

方法描述
COUNT ([ALL | DISTINCT] expression | *)对结果集中的元组数量进行计数,如果是COUNT(*)那么会统计所有元组(包括NULL值)的数量,如果是COUNT(colname),那么会忽略NULL值,只统计非NULL值的数量
SUM ([ALL | DISTINCT] expression)对参数中的属性中的所有值求和
AVG ([ALL | DISTINCT] expression)对参数中的属性中的所有值取平均值,要求列的类型必须是数值类型,其中NULL值将会被忽略
MAX ([ALL | DISTINCT] expression)对参数中的属性求最大值,NULL值会被忽略
MIN ([ALL | DISTINCT] expression)对参数中的属性求最小值,NULL值会被忽略

对于COUNT函数,可以将参数指定为“*”,这样就会统计所有的元组数量,即使元组中包含NULL值,仍然会进行统计。

2-34对t1表的所有元组数量进行统计。例如:

SELECT COUNT(*) FROM t1;

count

-------

3

(1 row)

如果给COUNT函数的参数指定为表达式(或列值),则只统计表达式结果为非NULL值的个数。

2-35对t1表的c2列中的非NULL值的个数进行统计。例如:

SELECT COUNT(c2) FROM t1;

count

-------

2

(1 row)

如果在参数中指定了DISTINCT关键字,则先对结果中的值去掉重复值,然后再统计数量,如果不指定DISTINCT,则默认为ALL。

2-36对t1表的c1列中的非NULL值的个数进行统计,去掉重复值。例如:

SELECT COUNT(DISTINCT t1.c1) FROM t1;

count

-------

2

(1 row)

AVG函数、SUM函数、MIN/MAX函数同理。

2-37对表t1的c1列做求和操作。例如:

SELECT SUM(c1) FROM t1;

sum

-----

4

(1 row)

2-38对表t1的c1列求平均值。例如:

SELECT AVG(c1) FROM t1;

avg

--------------------

1.3333333333333333

(1 row)

在实际场景中,可能会统计每个组织所包含的人数,假设有一个关于组成成员信息的基本表,如表2-10所示。

表2-10 组成成员信息表

成员姓名所在组织
成员A组织1
成员B组织2
成员C组织1
成员D组织2
成员E组织3

那么要获得每个组织的人数就需要执行多次查询才能实现,具体语句如下:

SELECT COUNT(*) FROM 成员 WHERE 成员组织 = 1;

SELECT COUNT(*) FROM 成员 WHERE 成员组织 = 2;

……

使用分组方法可以帮助我们方便的解决这个问题,分组方法使用GROUP BY关键字来指定,通常形式如下:

GROUP BY column1, column2…

如果要简化上面的多条语句,则可以通过GROUP BY方法来实现,下面的方法可以统计每个组织中的成员的数量,具体语句如下:

SELECT 组织,COUNT(*) FROM 成员 GROUP BY 成员组织;

通过这样的语句,就可以获得如表2-11的结果。

表2-11 成员数量查询结果

组织人员数量
组织12
组织22
组织31

另外还可以考虑使用HAVING帮助筛选出符合条件的成员(找出成员人数大于1个的成员组织),具体语句如下:

SELECT 组织,COUNT(*) FROM 成员 GROUP BY 成员组织 HAVING COUNT(*) > 1;

则可以获得如表2-12的结果(其中组织3中只有1个成员,被HAVING字句过滤掉了)。

表2-12 成员人数大于1个的成员组织

组织人员数量
组织12
组织22

2-39根据表t1的c2列做分组,求每个分组内c1的个数,具体语句如下:

SELECT c2, COUNT(c1) FROM t1 GROUP BY c2;

c2 | count

----+-------

| 1

2 | 2

(2 rows)

2-40根据表t1的c2做分组,求每个分组内成c1的个数,将个数大于1的分组投影出来,具体语句如下:

SELECT c2, COUNT(c1) FROM t1 GROUP BY c2 HAVING count(c1) > 1;

c2 | count

----+-------

2 | 2

(1 row)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论