partition by

本文转载,地址:https://blog.csdn.net/dwt1415403329/article/details/87835383

1、建表并插入数据

因为over是开窗函数,mysql不支持开窗函数,其他如oracle,sql server,db2…等新版本都支持

CREATE TABLE Employee
(
  ID number(10) not null primary key,
  EmpName varchar(20),
  EmpSalary varchar(10),
  EmpDepartment varchar(20)
);
 
insert all into Employee values(1,'张三','5000','开发部')
into Employee values(2,'李四','2000','销售部')
into Employee values(3,'王麻子','2500','销售部')
into Employee values(4,'张三表叔','8000','开发部')
into Employee values(5,'李四表叔','5000','开发部')
into Employee values(6,'王麻子表叔','5000','销售部')
select 1 from dual

2、计算每个部门的总薪水

2.1、group by

SELECT EmpDepartment,SUM(EmpSalary) sum_sala FROM Employee GROUP BY EmpDepartment

在这里插入图片描述

2.2、over(partition by)

SELECT EmpSalary,EmpDepartment,SUM(EmpSalary) OVER(PARTITION BY EmpDepartment) sum_sala FROM Employee

在这里插入图片描述

小结
group by 和 partition by 都有分组统计的功能,但partition by并没有group by的汇总功能
partition by统计的每一条记录都存在,而group by将所有的记录汇总成一条记录(类似于distinct EmpDepartment 去重)
partition by可以和聚合函数结合使用,同时具有其他高级功能。

3、partition by继续探究

SELECT EmpSalary,EmpDepartment,SUM(EmpSalary) OVER(PARTITION BY EmpDepartment ORDER BY EmpSalary) sum_sala FROM Employee

在这里插入图片描述
小结

加上order by 后,类似于累加功能(sum_sala = sum_sala + EmpSalary)
先观察销售部的结果:4条记录: sum(EmpSalary)即sum_sala=2000,
	第5条记录: sum(EmpSalary)=sum_sala+2500=4500,
	即第4条sum_sala与第5EmpSalary的和,依次类推;
开发部:
	由于25000是并列的,所以计算的时候是几个并列数据之和即5000+5000=10000
with t1 as (select * from (
  select a.group_id,a.ap_start_date ,a.row_id, row_number() over(partition by t.group_Id order by t.TASK_DATE desc) mm
  from em_task t
       left join Em_Re_Group a on a.task_id = t.row_id where t.task_Type in( '1' ,'4') and t.status_Flag = '9'
       and t.c_Status_Flag = '4' and t.deleted_flag = '0') tt where mm = 1)

select q.dealer_code,t1.group_id,q.dealer_name,t1.ap_start_date from dm_dealer q, t1  where q.group_id = t1.group_id;
  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值