over窗口函数的其他灵活的用法。即,统计当前行的前N行及后N行数据。转自:https://blog.csdn.net/ck3207/article/details/84954511
先来看一下数据的组成:

 SELECT name, "ID" FROM CLIENT order by "ID";

结果为:

 3      1
ck2 2
ck2 3
ck3 3
ck4 4

ROWS BETWEEN CURRENT ROW AND CURRENT ROW

SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM CLIENT;

3      1
ck2 2
ck2 3
ck3 3
ck4 4

此案例下,其实与SELECT name, "ID" FROM CLIENT order by "ID";结果一致。因为数据统计行范围为BETWEEN CURRENT ROW AND CURRENT ROW,即当前行。

ROWS BETWEEN 1 PRECEDING AND CURRENT ROW

 SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) FROM CLIENT;

 3      1
ck2 3
ck2 5
ck3 6
ck4 7

此案例下,数据会统计当前行及当前行的前一行数据。PRECEDING为在…之前。

ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING
 SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN CURRENT ROW AND 1 following) FROM CLIENT;

 3      3
ck2 5
ck2 6
ck3 7
ck4 4

此案例下,数据会统计当前行及当前行的后一行数据。FOLLOWING为在…之后。

ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
 SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM CLIENT;

 3      3
ck2 6
ck2 8
ck3 10
ck4 7

此案例下,数据会统计当前行、当前行的前一行数据及当前行的后一行数据。

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
 SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM CLIENT;

 3      1
ck2 3
ck2 6
ck3 9
ck4 13

此案例下,数据会统计当前行之前的所有数据及当前行的数据。注意此SQL执行结果与SQLSELECT name, SUM("ID") over(ORDER BY "ID" ) FROM CLIENT;某些情况下结果是一致的。但当"ID"有重复值时,案例SQL数据到哪行算到哪行,而SQLSELECT name, SUM("ID") over(ORDER BY "ID" ) FROM CLIENT;会统计当前行前的所有数据及与当前行值一样的所有数据。

ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

 SELECT name, SUM("ID") over(ORDER BY "ID"  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM CLIENT;

 3      13
ck2 13
ck2 13
ck3 13
ck4 13

此案例下,会统计表中所有数据。与SQLSELECT name, SUM("ID") over() FROM CLIENT;结果无异,只是结果的排序略有不同。

说了这么多使用方法,可我还是不知道怎么用啊?假设有这么一种情况,数据库中有每月公司经营的盈亏额。老板想让你计算下每个月基于上一月是盈利还是亏损?盈利/亏损值是多少?那么此时用上一个over函数,分分钟搞定。

 select month, sum(balance) over(order by month rows between 1 preceding and current row) from month_profit_table ; // 假设balance盈利为正,亏损为负

over窗口函数进阶的更多相关文章

  1. Oracle开发之窗口函数 rows between unbounded preceding and current row

    目录=========================================1.窗口函数简介2.窗口函数示例-全统计3.窗口函数进阶-滚动统计(累积/均值)4.窗口函数进阶-根据时间范围统计 ...

  2. oracle使用(1)

    纯粹是记录工作中使用的分析函数或是语法点,不做其他用处. (1) with as 先举个例子吧: 有两张表,分别为A.B,求得一个字段的值先在表A中寻找,如果A表中存在数据,则输出A表的值:如果A表中 ...

  3. Oracle分析函数巧妙使用

    在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...

  4. SQL Server进阶 窗口函数

    概述  设计窗口函数目的? 在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成. 为了解决这些问题,在 2003 年 ISO SQL 标准加入了 ...

  5. SQL进阶系列之0窗口函数

    窗口函数 What's 窗口函数? 窗口函数也称为OLAP(OnLine Analytical Processing)函数,目前MySQL还不支持. 窗口函数的语法 <窗口函数> OVER ...

  6. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  7. SQL优化之SQL 进阶技巧(上)

    由于工作需要,最近做了很多 BI 取数的工作,需要用到一些比较高级的 SQL 技巧,总结了一下工作中用到的一些比较骚的进阶技巧,特此记录一下,以方便自己查阅,主要目录如下: SQL 的书写规范 SQL ...

  8. 详解SQL操作的窗口函数

    摘要:窗口函数是聚集函数的延伸,是更高级的SQL语言操作,主要用于AP场景下对数据进行一些分析.汇总.排序的功能. 本文分享自华为云社区<GaussDB(DWS) SQL进阶之SQL操作之窗口函 ...

  9. MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL

    MYSQL(进阶篇)--一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大 ...

随机推荐

  1. 1、webpack安装

    1.局部安装: npm i -D (npm install --save-dev的简写) 安装指定版本:npm i -D webpack @version 安装最新版:npm i -D webpack ...

  2. tp3.2 excel导出

    //导出操作 function exportExcel($expTitle,$expCellName,$expTableData,$names,$width){ $xlsTitle = iconv(' ...

  3. 描述linux目录结构以及目录结构命名规定

    FHS全称(Filesystem Hierarchy Standard),中文意思是目录层次标准,是linux的目录规范标准. 详情点击查看 FHS定义了两层规范: 第一层:“/”目录下的各个目录应该 ...

  4. js | javascript实现浏览器窗口大小被改变时触发事件的方法

    转载 当浏览器的窗口大小被改变时触发的事件window.onresize 为事件指定代码: 代码如下: window.onresize = function(){ } 例如: 浏览器可见区域信息: 代 ...

  5. Uncaught Error: Script error for "popper.js", needed by: bootstrap - require.js

    Uncaught Error: Script error for "popper.js", needed by: bootstrap https://requirejs.org/d ...

  6. 将Komodo Edit打造成Python开发的IDE

    Komodo Edit 支持Python 界面清爽, 将Komodo Edit 设置成Python的IDE,具体操作方法如下: 先添加自定义命令. 再设置命令行参数 设置高级选项 设置快捷键 完成.

  7. C语言字符篇(二)字符串处理函数

    字符串处理函数 1. 拷贝 strcpy 2. 追加 strcat   #include <string.h>   char *strcpy(char *dest, const char ...

  8. 18式优雅你的Python

    本文来自读者梁云同学的投稿,公众号:Python与算法之美 一,优雅你的Jupyter 1,更改Jupyter Notebook初始工作路径 平凡方法: 在cmd中输入jupyter notebook ...

  9. ElasticSearch 之 Client

    在使用ElasticSearch的时候,我们需要与Cluster通信,Java版本的API提供了几种方式来构造Client,进而通过Client操作Cluster.   1)使用Node与clusto ...

  10. JAVA-数组或集合

    哈哈,今天我们来讲解一下有关于一些数组 或者是集合的知识点 1.ArrayList,LinkedList,Vector的区别 ArrayList,LinkedList,Vector都是实现List接口 ...