开窗函数用法
开窗函数OVER(PARTITION BY)函数介绍开窗函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:1:over后的写法:over(order by salary)按照salary排序进行累计,order by是个默认的开窗函数over(partition by deptno)按照部门分区over(partition by deptno order by salary)2:开窗的窗口范围:over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。
举例:--sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2adf 3 45 45 --45加2减2即43到47,但是s在这个范围内只有45asdf 3 55 55cfe 2 74 743dd 3 78 158 --78在76到80范围内有78,80,求和得158fda 1 80 158gds 2 92 92ffd 1 95 190dss 1 95 190ddd 3 99 198gf 3 99 198over(order by salaryrows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。
举例:--sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内select name,class,s, sum(s)over(order by s rows between 2 preceding and 2 following) mm from t2adf 3 45 174 (45+55+74=174)asdf 3 55 252 (45+55+74+78=252)cfe 2 74 332 (74+55+45+78+80=332)3dd 3 78 379 (78+74+55+80+92=379)fda 1 80 419gds 2 92 440ffd 1 95 461dss 1 95 480ddd 3 99 388gf 3 99 293over(order by salary range between unbounded preceding and unbounded following)或者over(order by salary rows between unbounded preceding and unbounded following):窗口不做限制3、与over函数结合的几个函数介绍row_number()over()、rank()over()和dense_rank()over()函数的使用下面以班级成绩表t2来说明其应用t2表信息如下:cfe 2 74dss 1 95ffd 1 95fda 1 80gds 2 92gf 3 99ddd 3 99adf 3 45asdf 3 553dd 3 78select * from(select name,class,s,rank()over(partition by class order by s desc) mm from t2)where mm=1;得到的结果是:dss 1 95 1ffd 1 95 1gds 2 92 1gf 3 99 1ddd 3 99 1注意:1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果;select * from(select name,class,s,row_number()over(partition by class order by s desc) mm from t2 )where mm=1;1 95 1 --95有两名但是只显示一个2 92 13 99 1 --99有两名但也只显示一个2.rank()和dense_rank()可以将所有的都查找出来:如上可以看到采用rank可以将并列第一名的都查找出来;rank()和dense_rank()区别:--rank()是跳跃排序,有两个第二名时接下来就是第四名;select name,class,s,rank()over(partition by class order by s desc) mm from t2dss 1 95 1ffd 1 95 1fda 1 80 3 --直接就跳到了第三gds 2 92 1cfe 2 74 2gf 3 99 1ddd 3 99 13dd 3 78 3asdf 3 55 4adf 3 45 5--dense_rank()l是连续排序,有两个第二名时仍然跟着第三名select name,class,s,dense_rank()over(partition by class order by s desc) mm from t2 dss 1 95 1ffd 1 95 1fda 1 80 2 --连续排序(仍为2)gds 2 92 1cfe 2 74 2gf 3 99 1ddd 3 99 13dd 3 78 2asdf 3 55 3adf 3 45 4--sum()over()的使用select name,class,s, sum(s)over(partition by class order by s desc) mm from t2 --根据班级进行分数求和dss 1 95 190 --由于两个95都是第一名,所以累加时是两个第一名的相加ffd 1 95 190fda 1 80 270 --第一名加上第二名的gds 2 92 92cfe 2 74 166gf 3 99 198ddd 3 99 1983dd 3 78 276asdf 3 55 331adf 3 45 376first_value() over()和last_value() over()的使用--找出这三条电路每条电路的第一条记录类型和最后一条记录类型SELECT opr_id,res_type,first_value(res_type) over(PARTITION BY opr_id ORDER BY res_type) low,last_value(res_type) over(PARTITION BY opr_id ORDER BY res_type rows BETWEEN unbounded preceding AND unbounded following) highFROM rm_circuit_routeWHERE opr_id IN('000100190000000000021311','000100190000000000021355','0001001900000000000 21339')ORDER BY opr_id;注:rows BETWEEN unbounded preceding AND unbounded following的使用--取last_value时不使用rows BETWEEN unbounded preceding AND unbounded following 的结果SELECT opr_id,res_type,first_value(res_type) over(PARTITION BY opr_id ORDER BY res_type) low,last_value(res_type) over(PARTITION BY opr_id ORDER BY res_type) highFROM rm_circuit_routeWHERE opr_id IN('000100190000000000021311','000100190000000000021355','0001001900000000000 21339')ORDER BY opr_id;如下图可以看到,如果不使用rows BETWEEN unbounded preceding AND unbounded following,取出的last_value由于与res_type进行进行排列,因此取出的电路的最后一行记录的类型就不是按照电路的范围提取了,而是以res_type为范围进行提取了。
在first_value和last_value中ignore nulls的使用数据如下:取出该电路的第一条记录,加上ignore nulls后,如果第一条是判断的那个字段是空的,则默认取下一条,结果如下所示:--lag() over()函数用法(取出前n行数据)lag(expresstion,<offset>,<default>)with a as(select 1 id,'a' name from dualunionselect 2 id,'b' name from dualunionselect 3 id,'c' name from dualunionselect 4 id,'d' name from dualunionselect 5 id,'e' name from dual)select id,name,lag(id,1,'')over(order by name) from a;--lead() over()函数用法(取出后N行数据)lead(expresstion,<offset>,<default>)with a as(select 1 id,'a' name from dualunionselect 2 id,'b' name from dualunionselect 3 id,'c' name from dualunionselect 4 id,'d' name from dualunionselect 5 id,'e' name from dualselect id,name,lead(id,1,'')over(order by name) from a;--ratio_to_report(a)函数用法Ratio_to_report() 括号中就是分子,over() 括号中就是分母with a as (select 1 a from dualunion allselect 1 a from dualunion allselect 1 a from dualunion allselect 2 a from dualunion allselect 3 a from dualunion allselect 4 a from dualunion allselect 4 a from dualunion allselect 5 a from dual)select a, ratio_to_report(a)over(partition by a) b from aorder by a;with a as (select 1 a from dualunion allselect 1 a from dualunion allselect 1 a from dualunion allselect 2 a from dualunion allselect 3 a from dualunion allselect 4 a from dualunion allselect 4 a from dualunion allselect 5 a from dual)select a, ratio_to_report(a)over() b from a --分母缺省就是整个占比order by a;with a as (select 1 a from dualunion allselect 1 a from dualunion allselect 1 a from dualunion allselect 2 a from dualunion allselect 3 a from dualunion allselect 4 a from dualunion allselect 4 a from dualunion allselect 5 a from dual)select a, ratio_to_report(a)over() b from a group by a order by a;--分组后的占比。
count 开窗函数用法 -回复
count 开窗函数用法-回复开窗函数(Window Function)是一种在关系型数据库管理系统中使用的高级查询技术。
它允许我们在查询中对某个特定的窗口或分组范围内的数据进行处理,并返回计算结果。
开窗函数在各种数据分析、报表生成和数据处理场景中都有广泛的应用。
本文将深入探讨开窗函数的用法,并逐步回答相关问题。
开窗函数的基本语法如下:<窗口函数> OVER ([partition by 子句] order by 子句[rows/range 子句])其中:- `<窗口函数>`:表示对窗口中的数据进行计算和处理的函数,例如求和、计数、平均等。
- `partition by 子句`:可选参数,用于将数据分组。
如果省略该子句,则整个查询结果被视为一个窗口。
- `order by 子句`:指定用于排序的列或表达式,确定窗口内数据的顺序。
如果省略该子句,则窗口函数将按照查询返回的任意顺序返回结果。
- `rows/range 子句`:可选参数,用于指定窗口的大小或范围。
`rows`子句表示窗口大小以行数为单位,`range`子句表示以行的值为基准。
在开始我们的介绍之前,让我们先准备一些示例数据。
我们假设有一个名为`sales`的表,包含了销售数据,如下所示:sales_date store_id product_id quantity price2021-01-01 1001 5001 10 10.52021-01-01 1001 5002 5 20.02021-01-02 1002 5001 8 10.52021-01-02 1002 5001 2 10.52021-01-02 1002 5003 3 15.02021-01-03 1001 5001 12 10.52021-01-03 1001 5003 4 15.02021-01-03 1001 5003 6 15.0问题1:如何计算每个产品的总销售量和总销售额?要解决这个问题,我们可以使用开窗函数`SUM()`和`PARTITION BY`子句。
三种开窗函数的详细用法
三种开窗函数的详细用法开窗函数是SQL中一个非常有用的功能,它可以对查询结果集进行分组、排序、过滤等操作,常用于统计、排名、前后比较等场景。
在本文中,我们将介绍三种常用的开窗函数,并详细讨论它们的用法和示例。
一、ROW_NUMBER()函数ROW_NUMBER()函数是最常见的开窗函数之一,它为查询结果集中的每一行分配一个唯一的序号。
其语法如下:```sqlROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2)```PARTITION BY子句用于指定分组列,ORDER BY子句用于指定排序列。
以下是一个具体的示例:假设我们有一个学生成绩表student_scores,包含学生姓名、科目、成绩等字段,现在我们想要为每个学生的成绩按照科目排序,并计算出排名,可以使用ROW_NUMBER()函数来实现:```sqlSELECTstudent_name,subject,score,ROW_NUMBER() OVER (PARTITION BY student_name ORDER BY score DESC) as rankFROMstudent_scores;```在上面的示例中,我们对每个学生的成绩进行了排名,并按照成绩降序排序。
二、RANK()函数RANK()函数也常用于对查询结果集进行排名操作,与ROW_NUMBER()函数不同的是,RANK()函数在有相同排序值时会存在并列排名。
其语法如下:```sqlRANK() OVER (PARTITION BY column1 ORDER BY column2)```以下是一个使用RANK()函数的示例:假设我们继续沿用上面的学生成绩表,现在我们想要计算每个科目的平均成绩并进行排名,可以使用RANK()函数:```sqlSELECTsubject,AVG(score) as avg_score,RANK() OVER (ORDER BY AVG(score) DESC) as rankingFROMstudent_scoresGROUP BYsubject;```在上面的示例中,我们对每个科目的平均成绩进行了排名,并且按照平均成绩降序排序。
开窗函数的用法
开窗函数的用法
开窗函数,也叫窗口函数,是在统计分析中经常使用的一类函数,它通过使用各种窗口函数来对原始数据进行处理和重新构造,使得更容易观察其趋势及其特征,从而可以更好地理解和判断原始数据。
开窗函数的用法主要有以下几种:
1)移动平均:移动平均函数可以简单地通过滑动求和来计算某一时间段内的平均值,可以在观察原始数据时用来观察其趋势。
2)正交函数:正交函数可以将原始数据分解成正交系数和正交函数,从而可以统计分析、比较各个正交系数的大小,为后续分析提供依据。
3)滤波器:滤波器可以清除原始数据中的噪声,使得有效信号得以提取,从而更有效地观察数据趋势。
4)核函数:核函数可以根据某一时间段内的数据情况进行平滑处理,使原始数据更加平滑,从而可以更容易地捕捉数据的趋势。
- 1 -。
ck 开窗函数
ck 开窗函数CK 开窗函数随着数据处理和分析的需求不断增加,窗口函数(Window Function)在数据库查询语言中扮演着越来越重要的角色。
CK 开窗函数是一种常见的窗口函数,它在数据处理中具有很大的灵活性和实用性。
什么是窗口函数?在数据库查询中,窗口函数是一种计算特定窗口范围内数据的函数。
它可以用来对结果集中的每一行进行计算,并返回一个与该行相关的结果。
窗口函数通常用于在查询结果的基础上进行排名、聚合、排序等操作。
CK 开窗函数的基本语法CK 开窗函数的基本语法如下:```sqlSELECT 列名, 开窗函数() OVER (PARTITION BY 列名1, 列名2, ... ORDER BY 列名3, 列名4, ...)FROM 表名```其中,PARTITION BY 子句用于将结果集分割成不同的分区,而ORDER BY 子句用于对每个分区内的数据进行排序。
通过这两个子句的组合,我们可以对数据进行更细粒度的控制和处理。
CK 开窗函数的功能和用途CK 开窗函数提供了丰富的功能和用途,下面我们将介绍其中几个常用的功能:1. 排名(Ranking)CK 开窗函数可以用于对查询结果进行排名操作。
通过使用开窗函数,我们可以为每一行数据分配一个排名,从而得到按照指定条件排序后的结果。
2. 分组求和(Grouping)CK 开窗函数可以用于对查询结果进行分组求和操作。
通过使用开窗函数,我们可以在每个分组内对数据进行求和,并将求和结果作为一个新的列返回。
3. 移动平均(Moving Average)CK 开窗函数可以用于计算移动平均值。
通过使用开窗函数,我们可以指定一个窗口范围,然后计算在该范围内的平均值。
4. 累计求和(Cumulative Sum)CK 开窗函数可以用于计算累计求和。
通过使用开窗函数,我们可以指定一个窗口范围,然后计算在该范围内的累计求和值。
5. 前后比较(Lead and Lag)CK 开窗函数可以用于进行前后比较。
sqlserver开窗函数
sqlserver开窗函数SQL Server开窗函数是一种强大的查询工具,它允许在查询结果中创建一个窗口,对窗口中的数据进行排序、分组、聚合等操作。
本文将为您介绍SQL Server开窗函数的使用方法。
1. 窗口函数的语法窗口函数的语法如下:```SELECT column_name(s) OVER ([PARTITION BY partition_expression, ... ]ORDER BY sort_expression [ASC | DESC], ...ROWS {UNBOUNDED | n PRECEDING | FOLLOWING}) AS column_aliasFROM table_name;```其中,`column_name(s)`表示要查询的列名,`OVER`关键字表示开始定义窗口函数,`PARTITION BY`子句用于指定分组条件,`ORDER BY`子句用于指定排序条件,`ROWS`子句用于指定行范围。
2. 窗口函数的使用示例下面是一些常见的窗口函数示例:- 按照部门分组计算每个员工的销售额占比```sqlSELECTemployee_id,department_id,sales_amount,SUM(sales_amount) OVER (PARTITION BY department_id) AS total_sales_amount,sales_amount / SUM(sales_amount) OVER (PARTITION BY department_id) AS sales_ratioFROM sales_table;```- 按照时间排序计算每个月份的销售额累计值```sqlSELECTsale_date,sales_amount,SUM(sales_amount) OVER (ORDER BY sale_date) AS cumulative_sales_amountFROM sales_table;```- 按照部门和时间排序计算每个部门每个月份的销售额排名```sqlSELECTemployee_id,department_id,sale_date,sales_amount,RANK() OVER (PARTITION BY department_id,MONTH(sale_date) ORDER BY sales_amount DESC) ASsales_rankFROM sales_table;```以上示例仅为SQL Server开窗函数的基本用法,实际应用中还可以结合其他SQL语句进行更复杂的查询和分析。
teradata开窗函数 -回复
teradata开窗函数-回复Teradata 开窗函数(Window Functions),是用于在查询结果中执行聚合、排名和分析操作的强大工具。
这些函数能够在一系列行上进行计算,而不需要使用GROUP BY 子句。
在本文中,我们将一步一步回答关于Teradata 开窗函数的重要问题,并详细探讨其用法和优势。
开窗函数的定义及作用:开窗函数是一种特殊的聚合函数,它能够在查询结果集的某个特定窗口内进行数据操作,这个窗口可以是整个结果集,也可以是分组内的一部分。
开窗函数能够返回计算结果而不破坏原始查询结果的结构,因此被广泛用于对结果集进行排名、求均值、计算总和等操作。
Teradata 开窗函数的语法:在Teradata 中,开窗函数的语法如下所示:FUNCTION_NAME (expression) OVER ([PARTITION BYcolumn_name][ORDER BY column_name][ROWS BETWEEN {UNBOUNDED PRECEDING N PRECEDING} AND {UNBOUNDED FOLLOWING N FOLLOWING}])这里的FUNCTION_NAME 是开窗函数的名称,它可以是SUM、AVG、COUNT、ROW_NUMBER 等。
expression 是要进行计算的列或表达式。
PARTITION BY 子句是可选的,用于对结果集进行分组。
ORDER BY 子句也是可选的,用于指定排序顺序。
ROWS BETWEEN 子句用于指定计算窗口的范围。
开窗函数的使用案例:为了更好地理解和应用开窗函数,让我们通过一个示例来说明。
假设我们有一个名为Sales 的表,其中包含产品、日期和销售额三列的数据。
我们想要计算每个产品在每个日期下的销售额总和,并按照销售额降序排列。
首先,我们需要使用PARTITION BY 子句将数据按照产品进行分组,并使用ORDER BY 子句按照销售额降序排列:SELECT product, date, salesFROM SalesORDER BY product, sales DESC;接下来,我们使用SUM 开窗函数来计算每个产品在每个日期下的销售额总和:SELECT product, date, sales, SUM(sales) OVER (PARTITION BY product, date) AS total_salesFROM SalesORDER BY product, sales DESC;在此查询中,SUM(sales) OVER (PARTITION BY product, date) 表示对每个分组的product 和date 执行SUM 操作。
hive开窗函数用法
hive开窗函数用法Hive开窗函数用法1. 引言(100字)随着大数据时代的到来,数据处理变得越来越重要。
在分析和处理海量数据时,我们需要有效的工具和技术来提取和聚合信息。
Hive是一款基于Hadoop的数据仓库工具,可以方便地处理结构化和半结构化数据。
Hive 的开窗函数是一种强大的工具,可以在查询中进行聚合操作,本文将详细介绍Hive开窗函数的用法。
2. 开窗函数概述(200字)Hive的开窗函数是一种计算函数,用于计算指定的窗口范围内的聚合结果。
它可以处理分组数据,并根据窗口准则对每个分组进行聚合操作。
开窗函数可以根据指定的窗口大小和窗口位置来计算结果,并可以根据需要排序。
通过使用开窗函数,我们可以在查询中引入更复杂的分析逻辑,使其更具灵活性和功能性。
3. 开窗函数的语法和特性(300字)Hive的开窗函数采用与SQL类似的语法,同时还提供了一些特殊函数来处理窗口操作。
下面是开窗函数的基本语法:SELECT select_list, window_function() OVER (PARTITION BY partition_list ORDER BY order_list) FROM table_name;其中,select_list表示查询结果的列,window_function指定了要执行的开窗函数。
PARTITION BY子句用于分组数据,ORDER BY子句用于排序操作。
开窗函数的特性如下:- 支持多个窗口函数:可以在同一查询中使用多个开窗函数,并对不同的窗口范围进行计算。
这样,我们可以在一次查询中执行多个数据转换操作,而无需重复查询原始数据。
- 适用于多种数据类型:开窗函数适用于各种数据类型,包括数字、字符串和日期。
我们可以根据实际需求选择不同的开窗函数,以达到最佳的数据处理效果。
- 窗口规范设置:开窗函数支持指定窗口的大小和位置,以便计算符合指定条件的数据。
我们可以根据时间、行数或其他条件来定义窗口大小和窗口位置,并根据需要进行聚合。
hive sql开窗函数详解
一、概述Hive是一个建立在Hadoop上的数据仓库工具,可以进行大规模数据的存储和处理。
而SQL开窗函数是Hive中的一种重要功能,可以对查询结果进行分组、排序、过滤等操作。
本文旨在对Hive SQL开窗函数进行详细解析,包括开窗函数的概念、语法、常见用法等内容,帮助读者更好地理解和使用Hive中的开窗函数。
二、开窗函数概述开窗函数是一种高级SQL功能,它可以对查询结果进行分组、排序、聚合等操作,同时还可以获取分组内的排名、累积求和等特殊需求。
在Hive中,开窗函数通常与窗口规范一起使用,以实现更为灵活和复杂的数据处理。
三、开窗函数语法在Hive中,开窗函数的语法如下所示:```sqlSELECTcolumn_name,AGGREGATE_FUNCTION(column_name)OVER ([PARTITION BY partition_expression][ORDER BY sort_expression [ASC|DESC]][windowing_clause]) AS column_aliasFROMtable_name;```其中,关键词SELECT、OVER和FROM是开窗函数语法的核心部分,通过这些关键词可以实现对查询结果的开窗操作。
具体来说,关键词SELECT后面跟着需要查询的列名或者聚合函数;关键词OVER后面则是窗口规范的具体定义,包括分区、排序和窗口等内容;最后关键词FROM后面是需要查询的表名或者子查询。
四、开窗函数常见用法1. 分组排名:开窗函数可以用来给查询结果中的记录进行分组排名,例如获取每个分组内销售额最高的产品。
2. 累积求和:开窗函数还可以实现累积求和的功能,例如计算每天的销售总额和累积销售总额。
3. 滑动窗口:开窗函数可以定义滑动窗口,用来在时间序列数据中进行统计分析,如计算每个月的平均销售额。
4. 分位数计算:开窗函数可以用来计算分位数,获取数据分布的具体信息,如获取销售额在整体数据中的百分位。
sql开窗函数的原理及应用
SQL开窗函数的原理及应用1. 什么是开窗函数?在SQL中,开窗函数是一种用来对查询结果集进行分组、排序、聚合,并且能够对每个分组数据进行计算的函数。
开窗函数常用于处理复杂的分析查询,可以对一个查询结果集的特定子集进行计算,并将计算结果返回到每一行。
2. 开窗函数的语法开窗函数的语法如下:<函数名称>OVER ([PARTITION BY<列1>, <列2>, ...][ORDER BY<排序列> [ASC | DESC]][ROWS<行范围>])•函数名称:要使用的开窗函数,例如SUM、AVG、ROW_NUMBER等。
•PARTITION BY:可选参数,用于指定分组的列,类似于GROUP BY 语句。
•ORDER BY:可选参数,用于指定排序的列,可以在排序列后面加上ASC(默认)或DESC进行升序或降序排序。
•ROWS:可选参数,用于指定计算的行范围,常用的行范围有UNBOUNDED PRECEDING、CURRENT ROW、UNBOUNDED FOLLOWING等。
3. 开窗函数的常用类型3.1 汇总函数汇总函数用于对某列或某个分组的数据进行计算,常见的汇总函数有SUM、AVG、COUNT等。
例如,计算每个部门的销售总额:SELECT department_id, SUM(sales) OVER (PARTITION BY department_id) AS total_salesFROM sales_table;3.2 排名函数排名函数用于对查询结果集进行排序并产生一个排名,常见的排名函数有ROW_NUMBER、RANK、DENSE_RANK等。
例如,计算员工的销售排名:SELECT employee_id, sales, ROW_NUMBER() OVER (ORDER BY sales DESC) AS rankFROM sales_table;3.3 窗口函数窗口函数用于获取某个范围内的数据,并进行计算,常见的窗口函数有LEAD、LAG、FIRST_VALUE、LAST_VALUE等。
Hive常用函数总结二——开窗函数
Hive常⽤函数总结⼆——开窗函数窗⼝函数⼜叫OLAP函数/分析函数,窗⼝函数兼具分组和排序功能。
窗⼝函数最重要的关键字是 partition by 和 order by具体语法如下:XXX over (partition by xxx order by xxx)over()⾥⾯的 partition by 和 order by 都不是必选的,over()⾥⾯可以只有partition by,也可以只有order by,也可以两个都没有,需根据需求灵活运⽤。
1.sum、avg、min、max创建表create table user_pv(cookieid string, -- ⽤户登录的cookie,即⽤户标识createtime string, -- ⽇期pv int -- 页⾯访问量);cookie1,2021-05-10,1cookie1,2021-05-11,5cookie1,2021-05-12,7cookie1,2021-05-13,3cookie1,2021-05-14,2cookie1,2021-05-15,4cookie1,2021-05-16,4sum over (partition by xxx order by xxx)select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime) as pv1from user_pv;注意:over()⾥⾯加 order by 表⽰:分组内从起点到当前⾏的pv累积,如,11号的pv1=10号的pv+11号的pv, 12号=10号+11号+12号;over()⾥⾯不加 order by 表⽰:将分组内所有值累加。
2.row_number、rank、dense_rank、ntilecookie1,2021-05-10,1cookie1,2021-05-11,5cookie1,2021-05-12,7cookie1,2021-05-13,3cookie1,2021-05-14,2cookie1,2021-05-15,4cookie1,2021-05-16,4cookie2,2021-05-10,2cookie2,2021-05-11,3cookie2,2021-05-12,5cookie2,2021-05-13,6cookie2,2021-05-14,3cookie2,2021-05-15,9cookie2,2021-05-16,7SELECT cookieid,createtime,pv,RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn1,DENSE_RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn2,ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv DESC) AS rn3FROM user_pvWHERE cookieid = 'cookie1';RANK():分组后,从1开始排名,遇到相同值会在名次中留下空位DENSE_RANK():分组后,从1开始排名,遇到相同值不会留下空位ROW_NUMBER(): 分组后,从1开始排名,遇到相同值按照表中记录的顺序进⾏排列NTILE的使⽤需求:取数据排序后的前三分之⼀的数据ntile可以看成是:把有序的数据集合平均分配到指定的数量(num)个桶中, 将桶号分配给每⼀⾏。
