Oracle partition by 使用说明

--用法详解

 

0、select * from wmg_test;     ---测试数据

 

1、select v1,v2,sum(v2) over(order by v2) as sum     --按照 v2排序,累计n+n-1+....+1

from wmg_test;

 

2、select v1,v2,sum(v2) over(partition by v1 order by v2) as sum     --先分组,组内在进行 1 中的操作

from wmg_test;

 

 

3、select v1,v2,sum(v2) over(partition by v1 order by v1) as sum   ---稳定排序

from wmg_test;

 

 

4、select v1,v2,sum(v2) over(partition by v1) as sum    --相同key的进行回填处理,没有order by

from wmg_test;

 

 

5、select distinct v1,sum_01                                        --取一条

from (

select v1,sum(v2) over(partition by v1) as sum_01

from wmg_test

) a;

 

 

6、当然也可以逆序累加,只需order by desc 即可

 

总结区别:group by 和partition by的区别

group 单纯分组

partition 也能分组,但还具备累计的功能

 

7、max ... partition by  

 通sum ... partition by ,从第一条到当前的最大值

Select Pty_Id,
                              Data_Dt,
                              Fin_In,
                              Max(Fin_In) Over(Partition By Pty_Id Order By Data_Dt) As Max_Cost from

 

 

转载于:https://www.cnblogs.com/niubaba/p/9284392.html

### Oracle SQL 中 `PARTITION BY` 的使用方法 在 Oracle 数据库中,`PARTITION BY` 子句用于将结果集划分为多个逻辑分区,并允许在这些分区内独立地应用窗口函数。这有助于更高效地处理大规模数据集上的复杂查询操作[^4]。 #### 语法结构 基本语法形式如下: ```sql SELECT column_name(s), window_function() OVER ( PARTITION BY expression1[,expression2,...] ORDER BY sort_expression [ASC|DESC]) FROM table_name; ``` 其中: - **window_function**: 是指诸如 `ROW_NUMBER()`、`RANK()` 或者其他支持窗口操作的聚合函数。 - **PARTITION BY clause**: 定义如何分割输入行成不同的组或“分区”,类似于 GROUP BY 功能但是更加灵活。 - **ORDER BY clause within the OVER clause**: 对每一部分内的记录指定排序规则。 #### 实际案例展示 假设有一个名为 `employee` 的员工信息表,包含部门编号 (`deptid`) 和工资 (`salary`) 字段。为了获取各部门内部按照薪资降序排列后的排名情况,可采用以下语句: ```sql -- 查询每名雇员在其所在部门里的相对薪酬位置 SELECT empno, ename, deptid, salary, RANK() OVER (PARTITION BY deptid ORDER BY salary DESC) AS rnk FROM employee; ``` 此命令会先依据 `deptid` 将所有记录划分至相应部门内;接着,在各个子集中依 `salary` 进行逆向排序;最后利用内置的 `RANK()` 函数赋予每位成员一个基于其收入水平的独特位次标签[^3]。 另外值得注意的是,虽然 `GROUP BY` 可以用来汇总统计各组的数据特征,但当涉及到跨多条记录间的关系比较时(比如计算累计总和),则更适合选用带有 `PARTITION BY` 的窗口函数来完成任务[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值