oracle中sum和count,sum()over()和count()over()分析函数

本文通过创建和插入测试数据,详细展示了SQL中的窗口函数Sum() over()和Count() over()的用法。从计算总销售额、递加销售总额到分组统计,深入探讨了这些函数在实际数据分析中的应用场景。同时,还给出了count() over()在分组计数和递加计数方面的应用,进一步揭示了SQL窗口函数的强大功能。
摘要由CSDN通过智能技术生成

Sum()over()和count()over分析函数使用

创建测试表

createtabletest(sales_idvarchar2(2),salesvarchar2(10),destvarchar2(10),deptvarchar2(10),revenuenumber);

插入测试数据

insertintotestvalues('11','smith','hangzhou','市场',1000);

insertintotestvalues('12','smith','wenzhou','市场',2000);

insertintotestvalues('13','allen','wenzhou','渠道',3000);

insertintotestvalues('14','allen','wenzhou','渠道',4000);

insertintotestvalues('15','jekch','shanghai','渠道',2500);

insertintotestvalues('11','smith','hangzhou','市场',1000);

insertintotestvalues('12','smith','wenzhou','市场',2000);

commit;

SQL> select * from test;

SALES_ID SALESDESTDEPTREVENUE

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

11smithhangzhou市场1000

12 smithwenzhou市场2000

13allenwenzhou渠道3000

14allenwenzhou渠道4000

15jekchshanghai渠道2500

11smithhangzhou市场1000

12smithwenzhou市场2000

SQL> select sales_id,

2sales,

3dest,

4dept,

5revenue,

6sum(revenue) over() as总销售额

7from test

8;

SALES_ID SALESDESTDEPTREVENUE总销售额

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

11smithhangzhou市场100015500

12smithwenzhou市场200015500

13allenwenzhou渠道300015500

14allenwenzhou渠道400015500

15jekchshanghai渠道250015500

11smithhangzhou市场100015500

12smithwenzhou市场200015500

按照sales_id order by排序计算递加的销售总额

SQL> select sales_id,sales,dest,dept,revenue,sum(revenue)over(order by sales)递加销售总额from test;

SALES_ID SALESDESTDEPTREVENUE递加销售总额

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

14allenwenzhou渠道40007000

13allenwenzhou渠道30007000

15jekchshanghai渠道25009500

11smithhangzhou市场100015500

12smithwenzhou市场200015500

12smithwenzhou市场200015500

11smithhangzhou市场100015500

7 rows selected

SQL> select sales_id,sales,dest,dept,revenue,sum(revenue)over(partition by sales_id)分组销售总额from test;

SALES_ID SALESDESTDEPTREVENUE分组销售总额

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

11smithhangzhou市场10002000

11smithhangzhou市场10002000

12smithwenzhou市场20004000

12smithwenzhou市场20004000

13allenwenzhou渠道30003000

14allenwenzhou渠道40004000

15jekchshanghai渠道25002500

对sales_id进行分组,然后分组求sum

SQL> select sales_id,sales,dest,dept,revenue,sum(revenue)over(partition by sales order by sales_id)分组递加销售总额from test;

SALES_ID SALESDESTDEPTREVENUE分组递加销售总额

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

13allenwenzhou渠道30003000

14allenwenzhou渠道40007000

15jekchshanghai渠道25002500

11smithhangzhou市场10002000

11smithhangzhou市场10002000

12smithwenzhou市场20006000

12smithwenzhou市场20006000

对sales进行分组,然后分组内递加sum。

看下来的count()over()分析函数的使用

SQL> select sales_id,sales,count(*)over()求总计数,

2count(*)over(order by sales_id)递加求计数,

3count(*)over(partition by sales_id)分组求计数,

4count(*)over(partition by sales_id order by sales)分组递加求计数

5from test

6;

SALES_ID SALES求总计数递加求计数分组求计数分组递加求计数

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

11smith7222

11smith7222

12smith7422

12smith7422

13allen7511

14allen7611

15jekch7711

[@more@]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值