数据库 OLAP函数 的使用是本文我们主要要介绍的内容,我们知道,当今的数据处理大致可以分成两大类:联机事务处理(on-line transaction Processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。下表列出了OLTP与OLAP之间的比较。
用户 |
操作人员,低层管理人员 |
决策人员,高级管理人员 |
功能 |
日常操作处理 |
分析决策 |
DB 设计 |
面向应用 |
面向主题 |
数据 |
当前的, 最新的细节的, 二维的分立的 |
历史的, 聚集的, 多维的集成的, 统一的 |
存取 |
读/写数十条记录 |
读上百万条记录 |
工作单位 |
简单的事务 |
复杂的查询 |
用户数 |
上千个 |
上百个 |
DB 大小 |
联机分析处理 (OLAP) 可以用很好很强大来形容。这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现。首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看下面的SQL:
查询结果如下:
看到上面的ROW_NUMBER() OVER()了吗?很多人非常不理解,怎么两个函数能这么写呢?甚至有人怀疑上面的SQL语句是不是真的能执行。其实,ROW_NUMBER是个函数没错,它的作用从它的名字也可以看出来,就是给查询结果集编号。但是,OVER并不是一个函数,而是一个表达式,它的作用是定义一个作用域(或者可以说是结果集),OVER前面的函数只对OVER定义的结果集起作用。怎么样,不明白?没关系,我们后面还会详细介绍。
从上面的SQL我们可以看出,典型的DB2在线分析处理的格式包括两部分:函数部分和OVER表达式部分。那么,函数部分可以有哪些函数呢?如下:
上面这些函数的作用,我会在后面逐步给大家介绍,大家可以根据函数名猜测一下函数的作用。
假设我想在不改变上面语句的查询结果的情况下,追加对部门员工的平均工资和全体员工的平均工资的查询,怎么办呢?用通常的SQL很难查询,但是用OLAP函数则非常简单,如下SQL所示:
查询结果如下:
请注意序号和部门序号之间的区别,我们在查询部门序号的时候,在OVER表达式中多了两个子句,分别是PARTITION BY和ORDER BY。它们有什么作用呢?在介绍它们的作用之前,我们先来回顾一下OVER的作用,还记得吗?
OVER是一个表达式,它的作用是定义一个作用域(或者可以说是结果集),OVER前面的函数只对OVER定义的结果集起作用。
ORDER BY的作用大家应该非常熟悉,用来对结果集排序。PARTITION BY的作用其实也很简单,和GROUP BY的作用相同,用来对结果集分组。
到此为止,大家应该对OLAP函数的套路有一定的了解和体会了吧。大家看一下上面SQL的结果集,发现王五的工资是null,当我们按工资排序时,null被放到最后,我们想把null放在前边该怎么办呢?使用NULLS FIRST关键字即可,默认是NULLS LAST,请看下面的SQL:
查询结果如下:
请注意ROW_NUMBER和RANK之间的区别,RANK是等级,排名的意思,李四和李白的工资都是5000,他们并列排名第二。张三和王蓝的工资都是4000,怎么RANK函数的排名是第四,而DENSE_RANK的排名是第三呢?这正是这两个函数之间的区别。由于有两个第二名,所以RANK函数默认没有第三名。
现在又有个新问题,假设让你查询一下每个员工的工资以及工资小于他的所有员工的平均工资,该怎么办呢?怎么?没听明白问题?不要紧,请看下面的SQL:
查询结果如下:
上面SQL中的OVER部分出现了一个ROWS子句,我们先来看一下ROWS子句的结构:
ROWSBETWEEN<上限条件>AND<下限条件>
其中“上限条件”可以是如下关键字:
UNBOUNDEDPRECEDING
CURRENTROW
“下线条件”可以是如下关键字:
CURRENTROW
UNBOUNDEDFOLLOWING
注意,以上关键字都是相对当前行的,UNBOUNDED PRECEDING表示当前行前面的所有行,也就是说没有上限;
OVER表达式还可以有个子句,那就是RANGE,它的使用方式和ROWS十分相似,或者说一模一样,作用也差多不,不过有点区别,如下所示:
RANGE BETWEEN<上限条件>AND<下限条件>
其中的<上限条件>、<下限条件>和ROWS一模一样,如下的SQL演示它们之间的区别:
查询结果如下:
上面SQL的RANGE子句的作用是定义一个工资范围,这个范围的上限是当前行的工资-500,下限是当前行工资+500。例如:李四的工资是3000,所以上限是3000-500=2500,下限是3000+500=3500,那么有谁的工资在2500-3500这个范围呢?只有李四和李白,所以RANGE列的值就是3000(李四)+3200(李白)=6200。以上就是ROWS和RANGE得区别。

上面的SQL还用到了FIRST_VALUE和LAST_VALUE两个函数,它们的作用也非常简单,用来求OVER定义集合的最小值和最大值。值得注意的是这两个函数有个参数,’IGNORE NULLS’或‘RESPECT NULLS’,它们的作用正如它们的名字一样,用来忽略NULL值和考虑NULL值。
还有两个函数我们没有介绍,LAG和LEAD,这两个函数的功能非常强大,请看下面SQL:
查询结果如下:
我们先来看一下LAG和LEAD函数的声明,如下:
LAG(表达式或字段,偏移量,默认值, IGNORE NULLS或RESPECT NULLS)
LAG是向下偏移,LEAD是想上偏移,大家看一下上面SQL的查询结果就一目了然了。
到此为止,有关DB2 OLAP函数的所有知识都介绍给大家了,下面我们再次回顾一下DB2在线分析处理的组成部分,如下:
函数OVER(PARTITION BY子句ORDER BY子句ROWS或RANGE子句)。
关于DB2数据库中OLAP函数的使用的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】
如何查看DB2占用的端口号
DB2数据查看占用的端口号,分为windows和linux系统查看方式,如下:一、linux系统查看DB2占用端口号2start启动了数据库管理器,并且通讯方式配置为TCP/IP。2.首先切换到db2inst1用户 su - db2inst13.查找TCP/IP Service name db2 get dbm cfg | grep -i service4.通过上一句命令的输出(如db2c_db2inst1)在/etc/services文件中找对应的端口号 grep db2c_db2inst1 /etc/services 输出 db2c_db2inst1 /tcp#其中就是db2数据库所占用的端口号二、Windows系统查看DB2占用端口号方式如下:1、使用命令 db2 get dbm cfg找到SVCENAME 查找到TCP/IP 服务2、到系统配置文件里找到service name 对应的 port numberwindows:查看 c:\windows\system32\drivers\etc\services aix: 查看 /etc/services如下:DB2_DB/tcpDB2_DB2_/tcpDB2_DB2_/tcpDB2_DB2_END/tcpdb2c_DB2 /tcp
如何制作Excel数据透析表
创建数据透视表1. 打开要创建数据透视表(数据透视表:一种交互的、交叉制表的 Excel 报表,用于对多种来源(包括 Excel 的外部数据)的数据(如数据库记录)进行汇总和分析。 )的工作簿。 o 如果是基于 Web 查询(Web 查询:用于检索存储在 Intranet 或 Internet 中的数据的查询。 )、参数查询(参数查询:一种查询类型,当运行参数查询时,将提示输入用于为结果集选择记录的值(条件),这样同一个查询就可用于检索不同的结果集。 )、报表模板(报表模板:包含一个或多个查询或基于外部数据的数据透视表的 Excel 模板 ( file)。 保存报表模板时,Excel 将保存查询定义,但不保存在模板中查询的数据。 )、“Office 数据连接”文件或查询文件创建报表,请将检索数据导入到工作簿中,再单击包含检索数据的 Microsoft Excel 数据清单(清单:包含相关数据的一系列工作表行,例如,发票数据库或一组客户名称和电话号码。 清单的第一行具有列标志。 )中的单元格。 如果检索的数据是来自于 OLAP(OLAP:为查询和报表(而不是处理事务)而进行了优化的数据库技术。 OLAP 数据是按分级结构组织的,它存储在多维数据集而不是表中。 ) 数据库,或者“Office 数据连接”以空白数据透视表的形式返回数据,请继续下面的步骤 6。 o 如果要基于 Excel 数据清单或数据库创建报表,请单击数据清单或数据库中的单元格。 2. 在“数据”菜单上,单击“数据透视表和数据透视图”。 3. 在“数据透视表和数据透视图向导”的步骤 1 中,遵循下列指令,并单击“所需创建的报表类型”下的“数据透视表”。 4. 按向导步骤 2 中的指示进行操作。 5. 按向导步骤 3 中的指示进行操作,然后决定是在屏幕上还是在向导中设置报表版式。 通常,可以在屏幕上设置报表的版式,推荐使用这种方法。 只有在从大型的外部数据源缓慢地检索信息,或需要设置页字段(页字段:在数据透视表或数据透视图报表中指定为页方向的字段。 在页字段中,既可以显示所有项的汇总,也可以一次显示一个项,而筛选掉所有其他项的数据。 )来一次一页地检索数据时,才使用向导设置报表版式。 如果不能确定,请尝试在屏幕上设置报表版式。 如有必要,可以返回向导。 6. 请执行下列操作之一: 在屏幕上设置报表版式1. 从“数据透视表字段列表”窗口中,将要在行中显示数据的字段拖到标有“将行字段拖至此处”的拖放区域。 如果没有看见字段列表,请在数据透视表拖放区域的外边框内单击,并确保“显示字段列表”被按下。 若要查看具有多个级别的字段中哪些明细数据级别可用,请单击该字段旁的。 2. 对于要将其数据显示在整列中的字段,请将这些字段拖到标有“请将列字段拖至此处”的拖放区域。 3. 对于要汇总其数据的字段,请将这些字段拖到标有“请将数据项拖至此处”的区域。 只有带有或图标的字段可以被拖到此区域。 如果要添加多个数据字段,则应按所需顺序排列这些字段,方法是:用鼠标右键单击数据字段,指向快捷菜单上的“顺序”,然后使用“顺序”菜单上的命令移动该字段。 4. 将要用作为页字段的字段拖动到标有“请将页字段拖至此处”的区域。 5. 若要重排字段,请将这些字段拖到其他区域。 若要删除字段,请将其拖出数据透视表。 若要隐藏拖放区域的外边框,请单击数据透视表外的某个单元格。 注意 如果在设置报表版式时,数据出现得很慢,则请单击“数据透视表”工具栏上的“始终显示项目”来关闭初始数据显示。 如果检索还是很慢或出现错误信息,请单击“数据”菜单上的“数据透视表和数据透视图”,在向导中设置报表布局。 在向导中设置报表布局如果已经从向导中退出,则请单击“数据”菜单上的“数据透视表和数据透视图”以返回该向导中。 6. 在向导的步骤 3 中,单击“布局”。 7. 将所需字段从右边的字段按钮组拖动到图示的“行”和“列”区域中。 8. 对于要汇总其数据的字段,请将这些字段拖动到“数据”区。 9. 将要作为页字段使用的字段拖动到“页”区域中。 如果希望 Excel 一次检索一页数据,以便可以处理大量的源数据,请双击页字段,单击“高级”,再单击“当选择页字段项时,检索外部数据源”选项,再单击“确定”按钮两次。 (该选项不可用于某些源数据,包括 OLAP 数据库和“Office 数据连接”。 )10. 若要重排字段,请将它们拖到其他区域。 某些字段只能用于某些区域;如果将一个字段拖动到其不能使用的区域,该字段将不会显示。 11. 若要删除字段,请将其拖到图形区之外。 12. 如果对版式满意,可单击“确定”,然后单击“完成”。
EXCEL数据透视表怎么用?是干什么的
数据透视表是交互式报表,可快速合并和比较大量数据。 您可旋转其行和列以看到源数据的不同汇总,而且可显示感兴趣区域的明细数据。 何时应使用数据透视表 如果要分析相关的汇总值,尤其是在要合计较大的数字清单并对每个数字进行多种比较时,可以使用数据透视表。 在上面所述报表中,用户可以很清楚地看到单元格 F3 中第三季度高尔夫销售额是如何通过其他运动或季度的销售额或总销售额计算出来的。 由于数据透视表是交互式的,因此,您可以更改数据的视图以查看更多明细数据或计算不同的汇总额,如计数或平均。 我的数据是如何组织的 在数据透视表中,源数据中的每列或字段都成为汇总多行信息的数据透视表字段。 在上例中,“运动”列成为“运动”字段,高尔夫的每条记录在单个高尔夫项中进行汇总。 数据字段(如“求和项:销售额”)提供要汇总的值。 上述报表中的单元格 F3 包含的“求和项:销售额”值来自源数据中“运动”列包含“高尔夫”和“季度”列包含“第三季度”的每一行。 如何创建数据透视表 若要创建数据透视表,请运行“数据透视表和数据透视图向导”。 在向导中,从工作表列表或外部数据库选择源数据。 向导然后为您提供报表的工作表区域和一列可用字段。 当您将字段从列表窗口拖到分级显示区域时,Microsoft Excel 自动汇总并计算报表。 如果使用“Office 数据连接”检索报表的外部数据(外部数据:存储在 Excel 之外的数据。 例如,在 Access、DBASE、SQL Server 或 Web 服务器上创建的数据库。 ),则可直接将数据返回到数据透视表,而不必运行“数据透视表和数据透视图向导”。 当不需要合并来自外部数据库(数据库:与特定主题或用途相关的数据集合。 在数据库中,有关特定录入项的信息(例如,雇员或订单)被分类存入表、记录和字段中。 )的多个表(表:关于特定主题的一组数据的集合,以记录(行)和字段(列)的形式存储。 )中的数据,或者不需要在创建报表前筛选数据以选择特定记录时,推荐使用“Office 数据连接”检索报表的外部数据,以及检索 OLAP(OLAP:为查询和报表(而不是处理事务)而进行了优化的数据库技术。 OLAP 数据是按分级结构组织的,它存储在多维数据集而不是表中。 ) 数据库的数据。 创建数据透视表后,可对其进行自定义以集中在所需信息上。 自定义的方面包括更改布局、更改格式或深化以显示更详细的数据创建数据透视表 1. 打开要创建数据透视表(数据透视表:一种交互的、交叉制表的 Excel 报表,用于对多种来源(包括 Excel 的外部数据)的数据(如数据库记录)进行汇总和分析。 )的工作簿。 o 如果是基于 Web 查询(Web 查询:用于检索存储在 Intranet 或 Internet 中的数据的查询。 )、参数查询(参数查询:一种查询类型,当运行参数查询时,将提示输入用于为结果集选择记录的值(条件),这样同一个查询就可用于检索不同的结果集。 )、报表模板(报表模板:包含一个或多个查询或基于外部数据的数据透视表的 Excel 模板 ( file)。 保存报表模板时,Excel 将保存查询定义,但不保存在模板中查询的数据。 )、“Office 数据连接”文件或查询文件创建报表,请将检索数据导入到工作簿中,再单击包含检索数据的 Microsoft Excel 数据清单(清单:包含相关数据的一系列工作表行,例如,发票数据库或一组客户名称和电话号码。 清单的第一行具有列标志。 )中的单元格。 如果检索的数据是来自于 OLAP(OLAP:为查询和报表(而不是处理事务)而进行了优化的数据库技术。 OLAP 数据是按分级结构组织的,它存储在多维数据集而不是表中。 ) 数据库,或者“Office 数据连接”以空白数据透视表的形式返回数据,请继续下面的步骤 6。 o 如果要基于 Excel 数据清单或数据库创建报表,请单击数据清单或数据库中的单元格。 2. 在“数据”菜单上,单击“数据透视表和数据透视图”。 3. 在“数据透视表和数据透视图向导”的步骤 1 中,遵循下列指令,并单击“所需创建的报表类型”下的“数据透视表”。 4. 按向导步骤 2 中的指示进行操作。 5. 按向导步骤 3 中的指示进行操作,然后决定是在屏幕上还是在向导中设置报表版式。 通常,可以在屏幕上设置报表的版式,推荐使用这种方法。 只有在从大型的外部数据源缓慢地检索信息,或需要设置页字段(页字段:在数据透视表或数据透视图报表中指定为页方向的字段。 在页字段中,既可以显示所有项的汇总,也可以一次显示一个项,而筛选掉所有其他项的数据。 )来一次一页地检索数据时,才使用向导设置报表版式。 如果不能确定,请尝试在屏幕上设置报表版式。 如有必要,可以返回向导。 6. 请执行下列操作之一: 在屏幕上设置报表版式 1. 从“数据透视表字段列表”窗口中,将要在行中显示数据的字段拖到标有“将行字段拖至此处”的拖放区域。 如果没有看见字段列表,请在数据透视表拖放区域的外边框内单击,并确保“显示字段列表”被按下。 若要查看具有多个级别的字段中哪些明细数据级别可用,请单击该字段旁的。 2. 对于要将其数据显示在整列中的字段,请将这些字段拖到标有“请将列字段拖至此处”的拖放区域。 3. 对于要汇总其数据的字段,请将这些字段拖到标有“请将数据项拖至此处”的区域。 只有带有或图标的字段可以被拖到此区域。 如果要添加多个数据字段,则应按所需顺序排列这些字段,方法是:用鼠标右键单击数据字段,指向快捷菜单上的“顺序”,然后使用“顺序”菜单上的命令移动该字段。 4. 将要用作为页字段的字段拖动到标有“请将页字段拖至此处”的区域。 5. 若要重排字段,请将这些字段拖到其他区域。 若要删除字段,请将其拖出数据透视表。 若要隐藏拖放区域的外边框,请单击数据透视表外的某个单元格。 注意如果在设置报表版式时,数据出现得很慢,则请单击“数据透视表”工具栏上的“始终显示项目”来关闭初始数据显示。 如果检索还是很慢或出现错误信息,请单击“数据”菜单上的“数据透视表和数据透视图”,在向导中设置报表布局。 在向导中设置报表布局 如果已经从向导中退出,则请单击“数据”菜单上的“数据透视表和数据透视图”以返回该向导中。 6. 在向导的步骤 3 中,单击“布局”。 7. 将所需字段从右边的字段按钮组拖动到图示的“行”和“列”区域中。 8. 对于要汇总其数据的字段,请将这些字段拖动到“数据”区。 9. 将要作为页字段使用的字段拖动到“页”区域中。 如果希望 Excel 一次检索一页数据,以便可以处理大量的源数据,请双击页字段,单击“高级”,再单击“当选择页字段项时,检索外部数据源”选项,再单击“确定”按钮两次。 (该选项不可用于某些源数据,包括 OLAP 数据库和“Office 数据连接”。 )10. 若要重排字段,请将它们拖到其他区域。 某些字段只能用于某些区域;如果将一个字段拖动到其不能使用的区域,该字段将不会显示。 11. 若要删除字段,请将其拖到图形区之外。 12. 如果对版式满意,可单击“确定”,然后单击“完成”。
发表评论