`
心动音符
  • 浏览: 336972 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

PARTITION BY的使用

阅读更多
partition   by关键字是oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition   by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它有一部分函数既是聚合函数也是分析函数,比如avg、max,也有一部分是特有的,比如first、rank,除了order   by子句外,分析函数在一个查询中优先级最低。至于partition   by和group   by谁的性能更好,要看具体情况而定,从你所举的例子而言,partition   by的作用仅用于分组,那么性能可能比不上group   by。

sum()   over   (PARTITION   BY   ...)   是一个分析函数。   他执行的效果跟普通的sum   ...group   by   ...不一样,它计算组中表达式的累积和,而不是简单的和。  
    
  表a,内容如下:   
  B C D   
  02 02 1   
  02 03 2   
  02 04 3   
  02 05 4   
  02 01 5   
  02 06 6   
  02 07 7   
  02 03 5   
  02 02 12   
  02 01 2   
  02 01 23   
    
  select   b,c,sum(d)   e   from   a   group   by   b,c   
  得到:   
  B C E   
  02 01 30   
  02 02 13   
  02 03 7   
  02 04 3   
  02 05 4   
  02 06 6   
  02 07 7   
   
  而使用分析函数得到的结果是:  
  SELECT   b,   c,   d,   SUM(d)   OVER(PARTITION   BY   b,c   ORDER   BY   d)   e   FROM   a   
  B C E   
  02 01 2   
  02 01 7   
  02 01 30   
  02 02 1   
  02 02 13   
  02 03 2   
  02 03 7   
  02 04 3   
  02 05 4   
  02 06 6   
  02 07 7  

  结果不一样,这样看还不是很清楚,我们把d的内容也显示出来就更清楚了:  
  SELECT   b,   c,   d,SUM(d)   OVER(PARTITION   BY   b,c   ORDER   BY   d)   e   FROM   a   
  B C D E   
  02 01 2 2                     d=2,sum(d)=2   
  02 01 5 7                     d=5,sum(d)=7   
  02 01 23 30                   d=23,sum(d)=30   
  02 02 1 1                     c值不同,重新累计   
  02 02 12 13   
  02 03 2 2   
  02 03 5 7   
  02 04 3 3   
  02 05 4 4   
  02 06 6 6   
  02 07 7 7

分享到:
评论

相关推荐

    partition by 使用说明

    Partition By 函数使用说明 Partition By 函数是 SQL 语句中的一种功能强大且广泛应用的函数,它可以将查询结果按照一定的规则进行分区,并对每个分区进行独立的处理。在本文中,我们将详细介绍 Partition By 函数...

    SQLServer中Partition By及row_number 函数使用详解

    此时,可以使用 `PARTITION BY` 结合 `ROW_NUMBER()` 来实现这个需求。 `ROW_NUMBER()` 函数则是为每个分区分配一个唯一的行号,通常与 `OVER()` 子句一起使用。在 `OVER(PARTITION BY ... ORDER BY ...)` 中,`...

    Oracle查询中OVER (PARTITION BY ..)用法

    Oracle查询中的`OVER (PARTITION BY ..)`是一个窗口函数,它允许我们在数据集上执行计算,但不是在整个结果集上,而是针对每个分区。这部分功能非常强大,可以用于复杂的分析和排序任务,尤其是在处理分组数据时。在...

    row_number,根据多个字段过滤,partition by

    - **字符串拼接**:在`PARTITION BY`子句中使用了字符串拼接操作(`||`),这使得即使在某字段值为空的情况下也能正确分组。 - **日期格式化**:通过`TO_CHAR(date, 'YYYYMMDD')`将日期字段转换为字符串形式,便于...

    Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数(转载)

    除了基本的使用外,`OVER (PARTITION BY ...)` 还支持更复杂的窗口定义,比如使用 `ROWS BETWEEN` 或 `RANGE BETWEEN` 来指定窗口范围。 ##### 1. ROWS BETWEEN 和 RANGE BETWEEN - **ROWS BETWEEN**:基于行的...

    详解partition by和group by对比

    在SQL查询中,`GROUP BY` 和 `PARTITION BY` 都是用来处理数据分组的,但它们在功能和使用场景上有所不同。首先,`GROUP BY` 是一个基础的分组函数,它根据指定的列将数据进行分组,并且通常与聚合函数如 `SUM`, `...

    SQL中row-number函数用法

    **步骤2:结合PARTITION BY使用** ```sql SELECT * , ROW_NUMBER() OVER (PARTITION BY deptid ORDER BY salary DESC) AS Rank FROM employee; ``` 这条SQL语句将首先根据`deptid`进行分组,然后在每个分组内部...

    oracle partition 深入讨论

    ) PARTITION BY RANGE (order_date) ( PARTITION p_y2019_q1 VALUES LESS THAN (TO_DATE('2019-04-01', 'YYYY-MM-DD')), PARTITION p_y2019_q2 VALUES LESS THAN (TO_DATE('2019-07-01', 'YYYY-MM-DD')), ... ); ...

    sqlserver巧用row_number和partition by分组取top数据

    在SQL Server中,`row_number()` 和 `partition by` 是两个非常重要的功能,它们一起为处理复杂的数据分组和排序问题提供了强大的解决方案。`row_number()` 是一个内置的排名函数,而 `partition by` 是一个窗口函数...

    SqlServer的over partition by开窗语句

    SqlServer的over partition by开窗语句

    MYSQL 通过分区(Partition)提升MySQL性能

    PARTITION BY RANGE (YEAR(c3)) ( PARTITION p0 VALUES LESS THAN (1995), PARTITION p1 VALUES LESS THAN (1996), PARTITION p2 VALUES LESS THAN (1997), PARTITION p3 VALUES LESS THAN (1998), PARTITION ...

    Pose Partition Network pre-trained model

    The proposed PPN is favorably featured by low complexity and high accuracy of joint detection and partition. In particular, PPN performs dense regressions from global joint candidates within a ...

    Active@ Partition Recovery v.5.0.357 Enterprise Toolkit. Retail

    Active@ Partition Recovery for Windows - will help you if non-system partition is lost, i.e. you can boot Windows, install and run the software from under Windows to recover deleted or damaged ...

    Oracle Partition分区详细总结.pdf

    PARTITION BY RANGE (ORDER_DATE); ``` 在此示例中,`ORDER_DATE`作为分区键,可以根据不同的日期范围创建分区。 2. **列表分区**:根据一组离散的值将数据分布到不同的分区。例如,将客户数据按地区进行分区。...

    set materials by patition - 副本_partition_abaquspartition_

    对于复杂的模型,可以使用Python脚本来实现自动分区,如压缩包中的"set materials by patition - 副本.py"文件所示,通过编程逻辑来精确控制分区位置。 3. **设置材料**:在创建了分区后,可以在“Part → Assign ...

    Oracle中rank,over partition函数的使用方法

    在Oracle数据库中,`RANK()`, `OVER()`, `PARTITION BY` 是窗口函数的重要组成部分,它们在数据处理和分析中发挥着至关重要的作用。本文将深入探讨这些函数的用法,通过实例来帮助理解它们的功能和应用场景。 首先...

    只满足某个条件的查询效率分析

    介绍了 1.NOT EXISTS, 2.GROUP BY ... [HAVING ...] 3.count(*) over(partition by ...) 做查询的效率,以及各自的使用方法

Global site tag (gtag.js) - Google Analytics