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与第5条EmpSalary的和,依次类推;
开发部:由于2个5000是并列的,所以计算的时候是几个并列数据之和即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) mmfrom em_task tleft 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;
partition by相关推荐
- [CareerCup] 2.4 Partition List 划分链表
2.4 Write code to partition a linked list around a value x, such that all nodes less than x come bef ...
- min聚合函数查询带有额外字段sql|dense_rank()over(partition)|+班级学生成绩最高
oracle爱好者和群snowg的问题 上面的这个,有站点stationid,year,month,day和每天记录的day_tmin字段. 现在要求统计处每个stationid下面每月每日的最小da ...
- 使用ROW_NUMBER 和partition by 解决报表中的查询问题
在报表中遇到一个查询问题: 原始数据如下: Id cust_id call_date call_result 1 1 2012-03-15 09:00:00 fail 2 1 2012-03-15 0 ...
- D - Triangle Partition HDU - 6300 sort(cmp)
D - Triangle Partition HDU - 6300 题解 由于三点不共线,且三角形不相交,则对坐标排序,输出 #include<bits/stdc++.h> using n ...
- mysql col与row_使用mysql实现row_number() over(partition by col1 order by col2)函数
[color=red]row_number() OVER (PARTITION BY COL1 ORDER BY COL2)[/color] 表示根据COL1分组,在分组内部根据 COL2排序,而此函 ...
- Leetcode PHP题解--D14 561. Array Partition I
561. Array Partition I 题目链接 561. Array Partition I 题目分析 本题给了一个数组,要求将数组分为n个只有2个元素的一对. 使得每对数字中最小的数加起来的 ...
- 【leetcode】86. Partition List
题目如下: Given a linked list and a value x, partition it such that all nodes less than x come before no ...
- Partition Tables介绍及分区表转换
2019独角兽企业重金招聘Python工程师标准>>> --==================== -- Partition Tables --================== ...
- RANK() OVER(PARTITION BY deptno ORDER BY empno)
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序) rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()l是连 ...
- MySQL 千万级数据表 partition 实战应用
目前系统的 Stat 表以每天 20W 条的数据量增加,尽管已经把超过3个月的数据 dump 到其他地方,但表中仍然有接近 2KW 条数据,容量接近 2GB. Stat 表已经加上索引,直接 sele ...
最新文章
- easyui中 在子tabs中 添加新的tabs
- VS2017 OpenCV配置
- 无人驾驶急需解决:规划控制和传感器价格高两大问题
- CSDN并购博客园遐想
- 一致性 Hash 算法原理总结
- 写给中学生的算法入门:学代码之前看这篇就够了
- upgrade cmake-gui version
- Access数据库基于时间盲注的实现[www.freebuf.com]
- zoj 3261 逆向并查集+离线处理
- NSIS例子-TSE3.6.2脚本
- c语言作业的搜题软件下载,C语言题库app下载-C语言题库下载v2.3 安卓版-西西软件下载...
- 十大高人气商城高口碑蓝牙耳机排行榜,颜值在线性能无敌
- 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(上篇)(期末大作业、课程设计、毕业设计、结课项目)
- colorbox 自适应 高度
- 【记录30】条形码的生成
- 远心镜头与普通镜头拍摄工件孔径对比
- python爬斗鱼直播_从零开始写Python爬虫 --- 爬虫应用: 利用斗鱼Api抓取弹幕
- Indian Summer
- 【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
- Java字节转字符串