这个时候就去重的逻辑就显得尤为重要!
一、首先说说我个人对以下两个函数的理解
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
一般地:有意义的计数首先都需要去除重复,然后再进行count()计数!这个时候就去重的逻辑就显得尤为重要!一、首先说说我个人对以下两个函数的理解sum()是基于分组,也就是说有sum()的SQL语句中必须要有group by关键字,而count()可不必基于分组,二者在大多数情况下用以实现计数,但不同于count()的是,sum()内的字段必须要为number类型,常用于金额等数据的汇...
--------------------
原作者:搬长城的红砖
原文:https://blog.csdn.net/yin_jia_521/article/details/72626182
oracle
数据库多字段
去重
方法介绍:distinct 关键字、group by 、row_number ()over(partition by 列 order by 列 desc)
我的需...
,d.fname_l1
,
count
(1) over(partition by b.FNAME_L2,d.fname_l1)
数量
from t_gl_voucherentry a1
,t_gl_voucher a
,t_org_company b
,t_bd_period c
,t_pm_user d
where a1.Fbillid=a.fid
and a.fcompanyid=b.fi
select distinct column from table;
(2)、
统计
去重
后
数量
select
count
(distinct column) from table;–查
去重
后
数量
(3)、distinct必须放在开头
select id, distinct name from A; --会提示错误,因为distinct必须放在开......
2. 使用 GROUP BY 关键字
使用 GROUP BY 语句可以按照指定的列对结果
进行
分组,并且返回每个组的汇总信息。因为分组操作会自动去除重复项,所以也可以用来
去重
。
例如,以下 SQL 语句可以从表中选择唯一的城市名称,并
统计
每个城市的客户
数量
:
SELECT city,
COUNT
(*) FROM customers GROUP BY city;
3. 使用 ROW_NUMBER() 函数
ROW_NUMBER() 函数会为每个行分配一个唯一的序号,可以利用这个特性来
去重
。
例如,以下 SQL 语句可以从表中选择唯一的城市名称,并且只选择每个城市的第一条记录:
SELECT city, customer_name, phone
FROM (
SELECT city, customer_name, phone, ROW_NUMBER() OVER (PARTITION BY city ORDER BY customer_name) AS rn
FROM customers
WHERE rn = 1;