版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
以下代码均经过测试,可直接运行
Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计,
不一定很全面,但对BI应用场景做了少许说明
一创建一张销售数量表,数据趋势是递增的
CREATETABLEComputerSalesAS
SELECT
120+TRUNC(rn/12)+R0UND(DBMS_RAND0M.VALUE(1,10))SalesNumber
FROM
(
SELECTlevel,ROWNUMrn
FROMDUAL
CONNECTBYROWNUMCI20
);
一下面用于比较NULL值和非NULL值的统计,可以看出NULL值情况下的
COUNT是存在问题的,所以建议数据库系统中最好不要使用NLLL值列
SELECT
COUNT(*),
COUNT(a.SalesNumber),
COUNT(DISTINCTa.SalesNumber),
SUM(a.SalesNumber),
AVG(a.SalesNumber),
MAX(a.SalesNumber),
MIN(a.SalesNumber)
FROMComputerSalesA;
DELETEFROMComputerSalesWHERESalesNumberISNULL;
COMMIT;
INSERTINTOComputerSalesVALUES(NULL);
COMMIT;
INSERTINTOComputerSalesVALUES(NULL);
COMMIT;
SELECT
COUNT(*),
COUNT(a.SalesNumber),
COUNT(DISTINCTa.SalesNumber),
SUM(a.SalesNumber),
AVG(a.Sa1esNumbcr),
MAX(a.SalesNumber),
MIN(a.SalesNumber)
FROMComputerSalcsA;
SELECTtrunc(dbms_random.valued,101)),
DELETEFROMComputerSalesWHERESalesNumberISNULL;
COMMIT;
一创建增加了日期字段的表
CREATETABLEComputerSalesBAKAS
SELECTSalesNumber,TRUNC(SYSDate)+MOD(A.DateSEQ-l,10)SalesDate
FROM(SELECTSalesNumber,ROWNUMBER()OVER(ORDERBYROWID)DateSEQ
FROMComputerSales)A;
DROPTABLEComputerSales;
RENAMEComputerSalesBAKTOComputerSales;
一下面是两种创建方式,构招Area列和日期列
CREATETABLEComputerSalesBAKAS
SELECTSalesNumber,TRUNC(SYSDATE)+MOD(A.DateSEQ-1,24)SalesDate,
CASEWHENTRUNC((DateSEQ-1)/24)=1THEN'华南地区'
WHENTRUNC((DateSEQ-1)/24)=2THEN'华北北区'
WHENTRUNC((DateSEQ-1)/24)=3THEN'东北地区'
WHENTRUNC((DateSEQ-1)/24)=4THEN'华东地区'
ELSE'其他地区'
END
FROM(SELECTSalesNumber,ROW_NUMBER()OVER(ORDERBYROWID)DateSEQ
FROMComputerSales)A;
DROPTABLEComputerSales;
RENAMEComputerSalesBAKTOComputerSales;
一该例可构造SalcsDatc和Area的重复数据
CREATETABLEComputerSalesBAKAS
SELECTSalesNumber,
TRUNC(SYSDATE)+MOD(A.DateSEQ-1,10)SalesDate,
CASEWHENAreaSEQ=lTHEN'华南地区'
WHENAreaSEQ=2THEN'华北地区'
WHENAreaSEQ=3THEN'东北地区
WHENAreaSEQ=4THEN'华东地区'
ELSE'其他地区'
END
FROM(SELECTSalesNumber,ROWNUMBER()OVER(ORDERBYROWTD)
DateSEQ,ROUND(clbms_random.VALUE(1,5))AreaSE2FROMComputerSales)A;
DROPTABLEComputerSales;
RENAMEComputerSalesBAKTOComputerSales;
一移动平均值,累计求和,当前窗口平均值,当前窗口求和,以及窗口函数和排
序函数的作用域
SELECT
Area,SalesDate,SalesNumbcr,
MIN(SalesNumber)OVER(PARTITIONBYAreaorderbySalesDate)AS
minAreaSdlesDale,
MAX(SalesNumber)OVER(PARTITIONBYAreaorderbySalesDate)AS
max_Area_SalesDate,
AVG(SalesNumber)OVER(PARTITIONBYAreaorderbySalesDate)AS
avg_Area_SalesDate,
SUM(SalcsNumbcr)OVER(PARTITIONBYAreaorderbySalesDate)AS
sum_Area_SalesDate,
COUNT(*)OVER(PARTITIONBYAreaORDERBYSalesDate)AScount_Area,
MIN(SalesNumber)OVER(PARTITIONBYArea)ASmin_Area,
MAX(SalesNumber)OVER(PARTITIONBYArea)ASmaxArea,
AVG(SalesNumber)OVER(PARTITIONBYArea)ASavg_Area,
SUM(SalesNumber)OVER(PARTITIONBYArea)ASsum_Area,
COUNT(*)OVER(PARTITIONBYArea)AScount_Area
FROMComputerSales
一观察Rank,DenseRank,Rownumber,Count的区别
--Rank跳号,Dense.Rank不跳号,Rownumber唯一,Count按统计数计也跳号
―如果PARTITIONBY和orderby的字段是唯一的话,则这四个函数没什么
区别
SELECT
Area,SalesDate,SalesNumber,
RANKOOVER(PARTITIONBYAreaorderbySalesNumber)AS
RankAreaSa1esNumber,
DENSERANKOOVER(PARTITIONBYAreaorderbySalesNumber)AS
DenseRankAreaSalesNumber,ROWNUMBER()OVER(PARTITIONBYAreaorder
bySalesNumber)ASRownumberAreaSalesNumber,
COUNT(*)OVER(PARTITIONBYAreaorderbySalesNumber)AS
CountAll_Area_SalesNumber,
COUNT(SalesNumber)OVER(PARTITIONBYAreaorderbySalesNumber)AS
Count_Area_SalesNumber
FROMComputerSales
一观察Lag和Lead的异同,以及Lag参数之间的异同
一缺省情况下Lag取前一行的值,Lead取后一行的值
-Lag.lead的第一个参数决定了取行的位置,第二个参数为取不到值时的缺
省值
SELECT
Area,SalesDate,SalesNumber,
LAG(SalesNumber)OVER(PARTITIONBYAreaorderbySalcsDate)AS
Lag_Area_SalesNumber,
LEAD(SalesNumber)OVER(PARTITIONBYAreaorderbySalesDate)AS
LeadAreaSalesNumber,
LAG(SalesNumber,1)OVER(PARTITIONBYAreaorderbySalesDate)AS
LaglAreaSalesNumber,
LAG(SalesNumber,2)OVER(PARTITIONBYAreaorderbySalesDate)AS
Lag2_Area_SalesNumber,
LEAD(SalesNumber,1)OVER(PARTITIONBYAreaorderbySalesDate)AS
LeadlAreaSalesNumbcr,LEAD(SalesNumber,2)OVER(PARTITIONBYArea
orderbySalesDcite)ASLead2Area_SalesNumber,LAG(SalesNumber,1,0)OVER
(PARTITIONBYAreaorderbySalesDate)ASLag10_Area_Sa1esNumber,
LAG(SalesNumber,2,1)OVER(PARTITIONBYAreaorderbySalesDate)AS
Lag21_Area_SalesNumber,LEAD(SalesNumber,1,0)OVER(PARTITIONBYArea
orderbySalesDate)ASLead10Area_Sa1esNumber,
LEAD(SalesNumber,2,1)OVER(PARTITIONBYAreaorderbySalesDate)
ASLead21_Area_SalesNumber
EROMComputerSales
一观察First_Value和LastJValue的不同
一如果取同一个同组中最大值最小值对应的某列,使用FIRST_VALUE,按照升
降序排列即可
-LAST_VAI,UE有些像两次分组所求的最后一行
SELECT
Area,SalesDate,SalesNumber,
FTRST_VALUE(SalesDcite)OVER(PARTITIONBYAreaorderbySalesNumber)
ASFirstValue_Area,
FIRSTVALUE(SalesDate)OVER(PARTITION3YAreaorderbySalesNumber
DESC)ASFirstValueArea.Desc,
LAST_VALUE(SalesDate)OVER(PARTITIONBYAreaorderbySalesNumber)
ASLastValue_Area,
LAST_VALUE(SalesDate)OVER(PARTITIONBYAreaorderbySalesNumber
DESC)ASLastValue_Area_Desc
FROMComputerSalcs
一与上面不同的是,KEEP需要和DENSE_RANKFIRST|DENSE_RANKLAST配合
使用,且取的是相同Area中按SalesNumber排序所获得最大或最小的值,而上面只
是取第一行或最后一行
SELECTArea,SalesDate,SalesNumber,
DENSERANK()OVER(PARTITIONBYAreaORDERBYSalesNumber)
DENSE_RANK,
MTN(SalesDate)KEEP(DENSE_RANKFIRSTORDERBYSalesNumber)
OVER(PARTITIONBYArea)min_first,
MIN(SalesDate)KEEP(DENSE,RANKLASTORDERBYSalesNumber)
OVER(PARTITIONBYArea)min」ast,
MAX(SalesDate)KEEP(DENSE_RANKFIRSTORDERBYSalesNumber)
OVER(PARTITIONBYArea)max_first,
M^X(SalesDate)KEEP(DENSE_RANKLASTORDERBYSalesNumber)
OVER(PARTITIONBYArea)max_last
FROMComputerSales
-CUME_DIST和PERCENT_RANK差不多,都是累计计算比例,只不过计算基准不
同,CUME_DIST更符合一般的做法
-NTILE把数据平分为若干份,更适合用来计算四分位上的值
一RATIO_TO_REPORT,则是求当前值在分区中的比例,且不能与ORDERBY合起
来使用
—PERCENTILEDISC和PERCENTILECONT,则是给定的比例参数所对应的值,一-
般使用PERCENTILE_DISC即可
SELECTArea,SalesDate,SalesNumber,
ROUND(CUME_D1ST()OVER(PARTITIONBYAreaORDERBYSalesNumber),2)
cume_dist,
ROUND(PERCENT_RANK()OVER(PARTITIONBYAreaORDERBYSalesNumber),2)
PERCENTRANK,ROUND(RATIOTOREPORT(SalesNumber)OVER(PARTITIONBY
Area),2)RATIOTOREPORT,
NTILE(4)OVER(PARTITIONBYAreaORDERBYSalesNumber)NTILE,
PERCENTILE_DISC(O.7)WITHINGROUP(ORDERBYSalesNumber)
OVER(PARTITIONBYArea)PERCENTILEDISC,
PERCENTILE_CONT(O.7)WITHINGROUP(ORDERBYSalesNumber)
OVER(PARTITIONBYArea)PERCENTILE_CONT
FROMComputerSales
一增加了一列叫销售额,可以进行相关数理统计
CREATETABLEComputerSalesBAKAS
SELECTSalesNumber,
ROUND(SalcsNumbcr*10+5*DBMSRANDOM.VALUE(1,10))SalcsValue,
TRUNC(SYSDate)+MOD(A.DateSEQ-1,24)SalesDate,
CASEWHENTRUNC((DateSEQ-1)/24)=1THEN'华南地区'
WHENTRUNC((DateSEQ-1)/24)=2THEN'华北地区'
WHENTRUNC((DateSEQ-1)/24)=3THEN'东北地区'
WHENTRUNC((DateSEQ-1)/24)=4THEN'华东地区'
ELSE'其他地区’
ENDArea
FROM(SELECTSalesNumber,ROWNUMBER0OVER(ORDERBYROWID)DateSEQ
FROMComputerSales)A;
DROPTABLEComputerSales;
RENAMEComputerSalesBAKTOComputerSales;
SELECT*FROMComputerSales;
—其他统计•,对数理分析有研究的同学可以尝式一下其经济学含义
SELECTArea,SalesDate,SalesValue,SalesNumber,
REGR^SLOPE(SalesValue,SalesNumber)OVER(PARTITIONBYAreaORDERBY
SalesDate)〃斜率〃,
REGILINTERCEPT(SalesValue,SalesNumber)OVER(PARTITIONBYAreaORDER
BYSalesDate)〃截距〃,REGR_K2(SalesValue,SalesNumber)OVER(PARTITIONBY
AreaORDERBYSalesDate)〃回归线决定系数〃,
REGR^AVGX(SalesValue,SalesNumber)OVER(PARTITIONBYAreaORDERBY
SalesDate)〃回归线自变量平均值〃,
REG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46788-2025半导体器件表面镀涂锡和锡合金上的锡须的环境接收要求
- 【正版授权】 IEC 60601-2-64:2025 RLV EN Medical electrical equipment - Part 2-64: Particular requirements for the basic safety and essential performance of light ion beam medical electri
- 2025年大学大四(水利水电工程)水利枢纽综合测试试题及答案
- 工程砂浆知识培训课件
- 制造业安全环保培训
- 工程技术类安全生产培训课件
- 工程建设廉政培训课件
- 临床营养专业医疗质量控制指标(2022年版)学习课件
- 手术应激反应的决策干预策略
- 2026年安全生产隐患排查治理知识自测题库及答案
- 2025榆林市旅游投资集团有限公司招聘(15人)参考笔试题库及答案解析
- 2025福建三明市总工会三明市工人文化宫招聘工作人1人参考题库带答案解析
- 【人卫课件耳鼻喉9版】鼻科学第一章 鼻的应用解剖学及生理学
- 抵押车过户协议书
- 葡萄种植课件
- 浅析我国政府雇员制的利弊及发展对策研究
- 2025年全国高校辅导员国赛大赛基础知识测试题(附答案)(三套)
- 粉丝群体特征分析-洞察与解读
- 2025年亚氨基二乙酸行业分析报告及未来发展趋势预测
- 2025年江苏省普通高中高二上学期学业水平合格性考试调研历史试题(解析版)
- 学堂在线 雨课堂 学堂云 批判性思维-方法和实践 章节测试答案
评论
0/150
提交评论