窗口函数

什么是窗口函数?

  • 简而言之是一种用来生在分组中进行分析处理的函数

语法结构如下

<窗口函数>() over (partition by <用于分组的字段> order by <用于排序的字段>)
<窗口函数>的位置可以放两种函数
1 专用窗口函数rank, dense_rank, row_number 等等
2 聚合函数, 如sum, avg, count, max, min 等等

注意

  • 窗口函数是对where或者group by子句处理后的结果进行操作,窗口函数要写在select子句中

rank, dense_rank, row_number 功能都是得出排序序数,但是他们在处理名次并列时有所区别

  • rank 在数据出现名次并列时,会把按最小排名并列,比如三个第1,排名都是1,但是第二会跳序数显示为第4,因为总数为4嘛。
  • danse_ranke 在出现并列排名时则不会跳数字,即时有100个并列第一,到第101个非并列会显示为2。
  • row_number 不做并列处理,按照总数据量,直接排序,不进行并列。
  • 如果还是觉得不清楚麻烦看看看知乎大佬的文章吧
  • 通俗易懂的学会:SQL窗口函数 - 猴子的文章 - 知乎 https://zhuanlan.zhihu.com/p/92654574
SELECT device_id, university,gpa FROM
(SELECT device_id, university,gpa, 
RANK() over (PARTITION BY university ORDER BY gpa) as rk FROM user_profile) as a
WHERE a.rk=1;