一般地:有意义的计数首先都需要去除重复,然后再进行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