重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
提一个不太好的办法,计算的时候可以用case when分支将合计行提出来单独计算。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网络空间、营销软件、网站建设、尚志网站维护、网站推广。
比如case when md5_at=男 and md7_at like '%合计' then dh_c_stylename/(select dh_c_stylename from table where md5_at='男合计') else dh_c_sty_zb(原来的dh_c_sty_zb的计算方式)end
类似上面的做法,不过负载有些大,而且我不知道你的合计和占比是不是一起计算的,如果是,那么可能就要麻烦很多,个人建议可以用参数来计算这样会省些事情。比如将男合计先计算出来,然后转为一个参数,然后再计算合计的时候直接用,这样能省下很多事情。
where num=a
这些数据可以直接算的
count(decode(num,a,你要加的字段,null))
实现代码:
ELECT(CASE WHEN db_psndoc.age=30 THEN '30岁以上'
WHEN db_psndoc.age30 THEN '30岁及以下' END)
ranges, COUNT(*) rs ,100*round(COUNT(*)/SUM(COUNT(*))
OVER(),4)||'%' percent FROM bd_psnd
GROUP BY CASE
WHEN bd_psndoc.age=30 then '30岁及以下'
WHEN db_psndoc.age=30 THEN '30岁以上'
END
扩展资料
sum(..) over(..)用法分析:
sum(…) over( ),对所有行求和;
sum(…) over( order by … ), 连续求和;
sum(…) over( partition by… ),同组内所行求和;
sum(…) over( partition by… order by … ),同第1点中的排序求和原理,只是范围限制在组内。
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),sum()等一起使用。
over函数的参数:over(partition by columnname1 order by columnname2)
含义,按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。
例子:
select deptno,ename,sal,
sum(sal) over (partition by deptno order by ename) 部门连续求和,--各部门的薪水"连续"求和
sum(sal) over (partition by deptno) 部门总和, -- 部门统计的总和,同一部门总和不变