您的位置:首页 > 数据库

SQLzoo刷题-窗口函数

2020-08-04 19:59 85 查看

一、排名函数

  1. ROW_NUMBER()
  • 将select查询到的数据进行排序,每一条数据加一个序号
SELECT ROW_NUMBER() OVER(ORDER BY 字段)
  1. RANK()
  • 对某一个字段进行排名
  • 与ROW_NUMBER()的区别:
    ①ROW_NUMBER()是排序函数,1,2,3,4,5,6,…
    ②RANK()是排名函数,当某个字段的存在两个值相等时,会并列排名
SELECT RANK() OVER(ORDER BY 字段)
  1. 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

二、分区函数

  1. 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)

三、偏移函数

  1. 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

  1. LEAD函数
  • 按要求排名后,向下取排名第几的数值
LEAD(ColumnName,n,m) OVER (PARTITION BY 字段名 ORDER BY 字段名)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: