首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

GROUP BY 如何避免计算得到的值

2012-03-20 
GROUP BY 如何处理计算得到的值请教使用GROUP BY 如何处理计算得到的值?能不能这样使用?select ROW_NUMBER

GROUP BY 如何处理计算得到的值
请教使用GROUP BY 如何处理计算得到的值?能不能这样使用?

select ROW_NUMBER() OVER(ORDER BY sum(c.H_EVAL) DESC) RID,
sum(c.H_EVAL),
round(sum(c.H_EVAL)/p.P_TOTALNAV*100,2),--这里在GROUP BY里面该如何处理
a.S_I_CODE1,b.S_I_NAME1 
from TSTK_INDUSTRY_SW a ,TSTK_INDUSTRY1_ENUM_SW b,VCRP_HLD c,VCRP_NAV p
where c.I_CODE=a.I_CODE and b.S_I_CODE1=a.S_I_CODE1
and c.P_ID = 323 And c.BEG_DATE <= '2010-01-01' And c.END_DATE >'2010-01-01'
and p.P_ID = 323 And p.BEG_DATE <= '2010-01-01' And p.END_DATE >'2010-01-01'
and a.S_I_CODE1 in(select distinct S_I_CODE1 from TSTK_INDUSTRY_SW) 
group by a.S_I_CODE1,b.S_I_NAME1 --??
order by sum(c.H_EVAL) DESC

[解决办法]
你说的是PARTITION BY?分析函数的分组
[解决办法]
字段如果不在SUM等聚合函数参数里的字段,必须包含在group by中,
如果加在group by 中不合逻辑,你可以使用子查询嵌套
[解决办法]
round(sum(c.H_EVAL)/p.P_TOTALNAV*100,2),--这里在GROUP BY里面该如何处理
根据p.P_TOTALNAV的含义 把p.P_TOTALNAV加上MAX(),MIN(),SUM()修饰看看


[解决办法]
聚合函数sum,count,avg之类的group by中必须含有所有没有被聚合的字段
group by a.S_I_CODE1,b.S_I_NAME1,p.P_TOTALNAV这样就可以了
如果你查询的意图不是这样,就要在p.P_TOTALNAV这个字段上处理下

热点排行