欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle去重后再进行count()计数的操作实例

程序员文章站 2022-03-26 17:47:23
一般地:有意义的计数首先都需要去除重复,然后再进行count()计数! 这个时候就去重的逻辑就显得尤为重要! 一、首先说说我个人对以下两个函数的理解 sum()是基于分组,也就是说有sum()的sq...

一般地:有意义的计数首先都需要去除重复,然后再进行count()计数!

这个时候就去重的逻辑就显得尤为重要!

一、首先说说我个人对以下两个函数的理解

sum()是基于分组,也就是说有sum()的sql语句中必须要有group by关键字,而count()可不必基于分组,二者在大多数情况下用以实现计数,但不同于count()的是,sum()内的字段必须要为number类型,常用于金额等数据的汇总。而count()则可以为varchar2类型的字段。用于统计以count()内的字段为列的总记录数。

二、应用实例

需求:分别统计拥有份额的客户总数,以及客户下的机构、自然人的数量。

前提条件:份额表记录客户的多条数据,但是有体现唯一客户的字段c_fundacco,单纯的使用count(a.c_fundacco)显然存在重复的问题。这个时候去重关键字distinct就显得尤为重要了!

sql语句实现:

select count(distinct(a.c_fundacco)) f_sumcount, /*统计总人数是对唯一标识c_fundacco进行去重*/

count(distinct decode(b.c_custtype, '0', a.c_fundacco, null)) f_orgcount,/*统计机构时先以客户类型decode归类,再进行去重计数*/

count(distinct decode(b.c_custtype, '1', a.c_fundacco, null)) f_percount/*类似机构*/

from tshares a,

tclientinfo b

where a.c_clientinfoid = b.c_clientinfoid