当前位置:文章写作网 >日记 >日记 >oracle sql 汇总求和

oracle sql 汇总求和

2009-06-09 16:00 作者:tshfang 阅读量:29500 推荐32次 | 我要投稿

--本文的例子全部在oracle中实现,sql server的实现方法请参照sql server的帮助文档。

/*

oracle 中提供了sum,求和函数搭配rollup和cube可以满足大量格式的求和(sql server中也有这些函数

,用法上面有些小的区别).在前面的文章中也讲过了rollup和cube的使用方法和实现原理.

我们仍沿用上一篇文章<sql 行列互换>创建的表.先看看cube函数计算出数据的格式

*/

select name,kecheng,sum(chengji)

from fzq

group by cube (name,kecheng)

order by name,kecheng

/* 显示结果如下:

NAME KECHENG SUM(CHENGJI)

---------- -------------------- ----------------------

a 数学 70

a 语文 80

a 150

b 数学 100

b 语文 40

b 140

c 数学 92

c 语文 90

c 182

数学 262

语文 210

472

12 rows selected

*/

/*

先看看另类实现方式的结果:

NAME KECHENG CHENGJI

---------- ------------------------- ----------------------

a 数学 70

a 语文 80

a 总成绩: 150

b 数学 100

b 语文 40

b 总成绩: 140

c 数学 92

c 语文 90

c 总成绩: 182

数学合计: 262

语文合计: 210

全班总成绩: 472

12 rows selected

这个实现方法就上在课程中增加了总成绩,数学合计,语文合计,全班总成绩.整体上感觉比较舒服.

下面是实现脚本.

注意:to_number(chengji)为什么加to_number函数.这是因为union,union要求合并的查询结果

必须要求个数和数据类型一致.而在建表的时候将成绩字段设置成了varchar类型了.而下边的sum(chengji)

会自动转换成数字形式.所以必须使用to_number函数转换一下.

增加'11' id 这列的目的就是和name,kecheng一起排序,如果不按照order by name,id,kecheng

这个顺序排序,那么显示结果就会有差别.

*/

select name,kecheng,chengji

from

(

select '11' id ,name,kecheng,to_number(chengji) as chengji

from fzq

union

select '22' id, name, '总成绩:',sum(chengji)

from fzq

group by name

union

select '33' id,'',kecheng || '合计:',sum(chengji)

from fzq

group by kecheng

union

select '44' id,'','全班总成绩:',sum(chengji)

from fzq

) aa

order by name,id,kecheng

--如果还有其他好方法,拿出来大家共同分享.

其他人在看啥

    《oracle sql 汇总求和》的评论 (共 0 条)

    • 沼泽:很强。
    • 沼泽:仰望计算机高手。
    • Guest::good
    • Guest::yunsi
    • Guest::good
    • Guest::yunsi