`

oracle 分析函数之lead和lag

 
阅读更多

      Lag Lead 函数可以在一次查询中取出同一字段的前N行 的数据和后N行 的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。

 

     语法:Lead (expression, offset, default) over(partition-clause order-by-clause)

      参数说明: 
            offset 偏移,表示查询其后第n条记录, 如果不提供这个参数,就是默认为1;
            default 默认值,如果没有找到。如果没有设置,且找不到,那么就返回Null;

            query_partition_clause  分区语句,对结果集合分区的语句,是可选的,如果没有就是所有的一个分区;
            Order_by_clause 排序语句 必须需要 ,
如果没有order by 子句,就不是“连续”的。

 

       建表语句如下:

create table SMALL_CUSTOMERS(CUSTOMER_ID NUMBER,SUM_ORDERS  NUMBER);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 10);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 20);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 30);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 5);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 10);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 1);

 

     Lead具体用法:

select t.customer_id,
         t.sum_orders,
         lead(t.sum_orders) over(partition by t.customer_id order by t.sum_orders)
    from small_customers t; 

 

 

用Lead实现行转列:

第一步:

 

select customer_id,
       sum_orders,
       lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
       lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
       rownum rn
  from small_customers t
 order by rn;

 

 

第二步,过滤数据:

select *
  from (select customer_id,
               sum_orders,
               lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
               lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
               rownum rn
          from small_customers t
         order by t.sum_orders)
 where mod(rn, 5) = 1;

 

 

第三步,组装数据:

select customer_id, sum_orders || ',' || sum_orders2 || ',' || sum_orders3
  from (select customer_id,
               sum_orders,
               lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
               lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
               rownum rn
          from small_customers t
         order by t.sum_orders)
 where mod(rn, 5) = 1;

 

 

     Lag与Lead语法相同,区别是Lag表示查询其前第n条记录

  select t.customer_id,
         t.sum_orders,
         lag(t.sum_orders) over(partition by t.customer_id order by t.sum_orders)
    from small_customers t;

 

 

 

 

  • 大小: 46.2 KB
  • 大小: 37.6 KB
  • 大小: 25.2 KB
  • 大小: 21.5 KB
  • 大小: 44.2 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ORACLE分析函数教程

    通过本文的介绍,我们可以了解到Oracle分析函数的强大之处,尤其是在处理复杂的分析需求时。这些函数不仅简化了SQL查询,而且提高了数据处理的效率。理解并熟练掌握这些函数对于Oracle开发者来说至关重要。在实际...

    Oracle中的分析函数详解

    其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自连接。这篇文档将深入探讨Oracle中的分析函数,帮助你更好地理解和利用这一功能。 一、什么是...

    ORACLE分析函数大全

    Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...

    ORACLE 分析函数大全

    Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。

    Oracle分析函数

    Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 Oracle 分析函数的语法...

    ORACLE分析函数.pdf

    总的来说,Oracle分析函数提供了一套强大的工具,用于处理复杂的数据分析任务,使数据库查询更加灵活和高效。通过熟练掌握这些函数,数据库管理员和开发人员能够更有效地从数据中提取有价值的信息,支持业务决策和...

    ORACLE_分析函数大全

    除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...

    Oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于处理和分析数据集,提供了一种高效的方式来执行聚合操作,而无需多次查询数据库。分析函数能够直接在单次查询中完成复杂的数据计算,包括排序、分组、...

    oracle 分析函数学习笔记

    Oracle的分析函数还包括`ROW_NUMBER`, `RANK`, `DENSE_RANK`用于行号分配,`LEAD`, `LAG`用于获取前后行数据,`FIRST_VALUE`, `LAST_VALUE`获取窗口范围内的第一个或最后一个值,以及`NTILE`进行分桶等。这些函数在...

    oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...

    oracle的分析函数汇总

    下面我们将对 Oracle 分析函数进行详细的介绍和分析。 自动汇总函数 自动汇总函数包括 Rollup 和 Cube 两个函数。 * Rollup 函数:用于对数据进行分组和汇总,生成一个总的汇总结果。例如,使用 Rollup 函数可以...

    Oracle 分析函数.doc

    Oracle 分析函数是数据库查询中的强大工具,它们允许在单个SQL语句中对结果集进行复杂的计算和分组操作,极大地简化了数据分析的过程。在Oracle 8i版本之后引入,分析函数为处理大量数据提供了高效的方法,避免了...

    Oracle分析函数教程

    Oracle分析函数是数据库管理系统Oracle中的一个重要特性,自8.1.6版本开始引入,它们用于执行基于组的聚合计算,并且为每个组返回多行结果,而不仅仅是单行。这使得分析函数在数据分析和报表生成方面非常有用,能够...

    深入浅出Oracle分析函数

    Oracle分析函数是数据库查询中不可或缺的一部分,尤其对于数据分析师和数据库管理员来说,掌握这些函数能极大地提高数据处理的效率和精度。本篇文章将从以下几个方面对Oracle分析函数进行详细解读: 一、分析函数...

    oracle分析函数,窗口函数,报表函数

    Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...

    Oracle分析函数.pdf

    Oracle分析函数是OLAP(在线分析处理)和数据挖掘等领域中不可或缺的工具。 Oracle分析函数简介部分提到,分析函数在OLTP(在线事务处理)和OLAP系统中的应用场景不同。OLTP系统处理实时事务,业务逻辑复杂,而OLAP...

    oracle分析函数全面解析

    Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,主要用于处理复杂的报表统计和数据分析。它们在OLAP(在线分析处理)系统中尤其重要,因为这类系统往往需要处理大量数据并进行复杂的聚合计算,而分析...

    oracle分析函数

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,自8.1.6版本引入,极大地扩展了SQL在数据处理和分析上的能力。分析函数的主要作用是进行聚合操作,但与传统的聚合函数(如SUM, COUNT, AVG等)不同,它们...

Global site tag (gtag.js) - Google Analytics