SQLzoo刷题-窗口函数
2020-08-04 19:59
85 查看
一、排名函数
- ROW_NUMBER()
- 将select查询到的数据进行排序,每一条数据加一个序号
SELECT ROW_NUMBER() OVER(ORDER BY 字段)
- RANK()
- 对某一个字段进行排名
- 与ROW_NUMBER()的区别:
①ROW_NUMBER()是排序函数,1,2,3,4,5,6,…
②RANK()是排名函数,当某个字段的存在两个值相等时,会并列排名
SELECT RANK() OVER(ORDER BY 字段)
- DENSE_RANK()
- 是密集的排名函数
- 与RANK()的区别:
①DENSE_RANK(),处理相同的值时,排名:1,1,2(而不是1,1,3)
②RANK(),处理相同的值时,排名:1,1,3(跳过排名2)
SELECT DENSE_RANK() OVER(ORDER BY 字段)
参考链接:https://blog.csdn.net/shaiguchun9503/article/details/82349050
二、分区函数
- Partition By
- Partition By是分区函数
- 与GROUP BY的区别:Partition By统计的每一条记录都存在,而GROUP BY将所有的记录汇总成一条记录
RANK() OVER (PARTITION BY 字段1 ORDER BY 字段2 DESC) /*表示先按字段1分区,然后对每一个区内的字段2进行顺序输出*/
MIN(字段1) OVER (PARTITION BY 字段2 ORDER BY 字段1 ASC)
三、偏移函数
- LAG函数
- 按要求排名后,向上取排名第几的数值
LAG(ColumnName,n,m) OVER (PARTITION BY 字段名 ORDER BY 字段名) /*选取ColumnName对应上n行的数据,如果没有数据则返回m,如果没有输入m则返回null*/
/*显示前一天的确诊人数*/ SELECT name, DAY(whn), confirmed,/*DAY()用于选取日*/ LAG(confirmed, 1) OVER (PARTITION BY name ORDER BY whn) FROM covid WHERE name = 'Italy' AND MONTH(whn) = 3/*MONTH()用于选取月*/ ORDER BY whn
- LEAD函数
- 按要求排名后,向下取排名第几的数值
LEAD(ColumnName,n,m) OVER (PARTITION BY 字段名 ORDER BY 字段名)
相关文章推荐
- Sql Server2005 Transact-SQL 窗口函数(OVER)
- 窗口函数
- 用SQL实现结果集的各种转换----附窗口函数
- 分析函数之窗口函数
- 窗口函数(一)
- SQL Server中的窗口函数
- SQL Server中的窗口函数
- SQLServer 窗口函数
- Hive分析窗口函数(四) LAG,LEAD,FIRST_VALUE,LAST_VALUE
- sqlzoo练习答案--The JOIN operation
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
- 使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
- Hive 窗口函数、分析函数
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
- sqlzoo练习答案--SELECT within SELECT Tutorial
- postgresql 窗口函数
- 以row_number为例解读spark sql的窗口函数
- SparkStreaming 窗口函数
- 2 SELECT from WORLD Tutorial-SQLZoo