开窗函数、聚合函数、排序函数

‌SQL开窗函数(Window Functions)主要用于对数据集进行分区和排序,并在每个分区内进行聚合计算,同时保持数据的行级细节。

开窗函数的语法形式为:函数 + OVER(PARTITION BY <分组用列> ORDER BY <排序用列>)。其中,PARTITION BY用于定义分区,ORDER BY用于定义窗口内数据的排序。括号中的两个关键词PARTITION BY和ORDER BY可以只出现一个‌

-累计求和
  SELECT sale_date, daily_sales, SUM(daily_sales) OVER (ORDER BY sale_date) AS running_total FROM sales;

开窗函数必须与聚合函数或排序函数一起使用.
聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。
排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

RANK()函数,排名函数,可以对某一个字段进行排名。

ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号。ROW_NUMBER()函数还可以取指定顺序的数据。

SELECT * FROM ( 
SELECT *, ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores
) t WHERE t.总排序=2


ROW_NUMBER()是排序,当存在相同数据时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样。如果出现相同的,他们的排名是一样的。

DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,特别是对于有数据相同的情况,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,一般情况下用的排名函数就是RANK() [rank 1 1 3 4] [DENSE_RANK 1 1 2 3]

NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的'分区'一样 ,分为几个区,一个区会有多少个。


学习参考
https://blog.csdn.net/2401_82584055/article/details/139359910


补充:通过count()实现排序函数
case:对所有员工的薪水按照salary降序进行1-N的排名
实现dense_rank()和rank() 在于是否去重

      select
          emp_no,
          salary,
          (
              select
                  count(distinct salary)
              from
                  salaries s2
              where
                  s1.salary <= s2.salary
          ) as t_rank
      from
          salaries s1
      order by
          t_rank,
          emp_no
posted @   kiss_sheep  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示