窗口函数/解析函数

分析函数是以一定的方法在一个与当前行相关的结果子集中进行计算,也称为窗口函数。

Function(arg1 , arg2 ……) over(partition by clause order by clause windowing clause )

1.over分区条件中的列可以不在select列表中,但是必须在数据源中。
2.over排序条件中的列可以不在select列表中,但是必须在数据源中。
3.over排序条件是对所在分区中的数据进行排序,与select语句中的排序无关。但是会影响到分析函数的结果。
4.over中的开窗条件的范围一般仅限于分区本身。rows between unbounded preceding and current row表示从分区的最开始到当前行。
5.分析函数的数据来自结果集(施加了where条件之后的)。

Lead和Lag(不支持开窗的函数)

LEAD是求下一个,LAG求上一个

Lead和lag函数的第一参数为返回的列,第二参数为相隔行数(非负),第三个参数为不存在时的默认值(可以指定为当前行的值)

FIRST_VALUE和LAST_VALUE

这两个函数都可以与order by条件配合得到最大值和最小值。
First_value返回窗口中的第一个值。Ignore nulls表示忽略空值,如果第一个是空值返回第二个。

NTH_VALUE访问分区别的任意指定行

FIRST_VALUE相当于NTH_VALUE(sale , 1 )或者NTH_VALUE(sale , 1 )from first respect nulls。
可以与排序配合求第几大,第几小。

Ratio_to_report(当前行的值与分区总和的比值)

这个函数不支持排序和开窗。

Percent_rank(排在前百分之几)

当前行的排名的相对百分位置。

Percentile_cont(大体意思求排在某个百分比时所需的数值)

Percentile_disc(功能与Percentile_cont大体相同)

NTILE(类型于建立直方图,不支持开窗)

Stddev计算标准差(方差的平方根,支持开窗)

Listagg(把分区中的列按照顺序拼接起来,不支持开窗)

高级排序函数:

[ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx)
1.row_number() 连续且递增的数字 1 2 3 4 
  row_number() over (partition by xx order by xx )  
--学生表中按照所在专业分组,同专业内按成绩倒序排序,成绩相同则按学号正序排序,并给予组内等级
select row_number() over(partition by class_id order by score desc)rn,t.* from student2016 t
2.rank() 跳跃排序 若有相同数据则排名相同 然后跳跃排序 1 2 2 2 5
  rank() over (partition by xx order by xx ) 
select rank() over(partition by class_id order by score desc)rn,t.* from student2016 t
3.dense_rank 若有相同数据则排名相同 然后递增排序
dense_rank  over (partition by xx order by xx ) 1 2 2 2 3
select dense_rank() over(partition by class_id order by score desc)rn,t.* from student2016 t

高级分组函数

                  group by rollup(a,b,c)

select a,b,c,sum(d) from test group by rollup(a,b,c)

对rollup后面的列 按从右到左以少一列的方式进行分组直到所有列都去掉后的分组(也就是全表分组)
对于n个参数的 rollup,有n+1次分组

即按a,b,c,分组,union all a,b分组 union all a分组 union from test

----------------------------------------------------------------------------------

                  group by cube(a,b,c)

对n个参数,有2^n次分组

即按 ab,ac,a,bc,b,c最后对 全部分组

----------------------------------------------------------------------------------

                  group by grouping sets(a,b)

即只列出 对 a分组后,和对 b分组的结果集

原文地址:https://www.cnblogs.com/daoren/p/10263370.html

时间: 2024-11-07 07:30:21

窗口函数/解析函数的相关文章

Hive分析窗口函数

Hive分析窗口函数(四) LAG,LEAD,FIRST_VALUE,LAST_VALUE https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

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

目录=========================================1.窗口函数简介2.窗口函数示例-全统计3.窗口函数进阶-滚动统计(累积/均值)4.窗口函数进阶-根据时间范围统计5.窗口函数进阶-first_value/last_value6.窗口函数进阶-比较相邻记录 一.窗口函数简介: 到目前为止,我们所学习的分析函数在计算/统计一段时间内的数据时特别有用,但是假如计算/统计需要随着遍历记录集的每一条记录而进行呢?举些例子来说: ①列出每月的订单总额以及全年的订单总额②

嵌入式之---常用模板函数(用法说明函数、参数解析函数)

主要内容:嵌入式常用模板函数(用法说明函数.参数解析函数) /*显示参数列表*/ void usage() {     printf("usage: server [-p:x] [-i:IP] [-o]\n\n");     printf("       -p:x      Port number to listen on\n");     printf("       -i:str    Interface to listen on\n");

窗口函数 RANK

最近一直在了解与学习sqlserver 窗口函数的各种知识,发现窗口函数能够很方便实现在之前可能需要关联子查询等一些复杂的逻辑才能实现的逻辑,下边是自己的一些学习笔记. RANK函数:从小到大,每次最苦逼的就是考试了,肿么都会有一个结果排名,张三数学第一,李四.小明并列第二....这应该是我们最早接触到的排名概念,sqlserver 中rank 也是这样的意思,和row_number() 区别就是rownum会为每个分区值相同的去一个随机排名,即排名不会存在并列的情况 创建一个数据表:包含班级编

Spark窗口函数应用(-)

/** * @author DT大数据梦工厂 * 新浪微博 http://weibo.com/ilovepains/ * 微信公众账号:DT_Spark * 直播地址 YY频道:68917580 */object SparkSQLWindowFunctionOps { def main(args: Array[String]) { /** * 创建SparkConf对象,设置Spark程序运行时的配置信息 * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如

窗口函数 ROW_NUMBER

ROW_NUMBER:在窗口函数的分区.排序列 会为每一数据行分配唯一的序列值 最近在工作中经常会碰到,计算当前订单时该会员的第多少单以及会员的累积消费金额等情况 1:计算会员当前订单是该会员第几单(根据订单创建时间计算) 1 SELECT OrderCode , 2 CustCode , 3 OrderMoney , 4 CreateTime , 5 ROW_NUMBER() OVER ( ORDER BY CreateTime ) AS OrderSeq 6 FROM dbo.Sales_O

hive内置函数详解(分析函数、窗口函数)

cli命令 show functions; desc function concat; desc function extended concat;查看某个函数怎么使用的例子 nvl函数coalesce(v1,v2,...)返回参数中第一个非空值,如果所有值都为null返回null: set.cli.print.header=true; winfunc 员工 工资 标识 id  money type 关系型运算符优先级高到低为:not and orand or 优先级 select id ,mo

命令行参数解析函数 getopt

命令行参数解析函数 —— getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt; 该函数的argc和argv参数通常直接从main()的参数直接传递而来.optstring是选项字母组成的字串.如果该字串里的任一字符后面

x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的参数,然后调用encode()编码YUV数据.parse()首先调用x264_param_default()为保存参数的x264_param_t结构体赋默认值:然后在一个大循环中通过getopt_long()解析通过命令行传递来的存储在argv[]中的参数,并作相应的设置工作:最后调用select_input()和sele