Mysql窗口函数

发布于 2023-06-07  265 次阅读


目标:什么是窗口函数,窗口函数能干什么

窗口函数

窗口函数:(Window Functions),它提供了一种在查询结果集的特定窗口范围内计算和分析数据的功能。窗口函数可以在 SELECT 语句中使用,并且可以对分组的行进行排序、排名、聚合以及计算行与窗口中其他行的相对位置等操作。

窗口函数使用 OVER 子句来定义窗口规范,它指定了窗口函数要操作的数据集合范围。

常用的窗口函数

PARTITION BY:用于分组数据,窗口函数将在每个分组内独立计算。可以根据一个或多个列进行分组。

  • ROW_NUMBER:为每一行分配一个唯一的整数序号,可以根据指定的排序规则进行排序。
  • RANK:计算行在排序结果中的排名,相同值的行将获得相同的排名,但可能会跳过排名。
  • DENSE_RANK:计算行在排序结果中的排名,相同值的行将获得相同的排名,不会跳过排名。
  • SUM、AVG、COUNT、MIN、MAX 等聚合函数:在窗口范围内计算指定列的总和、平均值、计数、最小值、最大值等。

示例

 -- 窗口函数
WITH test(name,type,score) AS (
SELECT 'sqlercn', 'Mysql', 95
UNION ALL
SELECT 'tom', 'Mysql', 99
UNION ALL
SELECT 'Jerry', 'Mysql', 99
UNION ALL
SELECT 'Gavin', 'Mysql', 98
UNION ALL
SELECT 'sqkercn', 'PositionSQL', 99
UNION ALL
SELECT 'tom', 'PositionSQL', 99
UNION ALL
SELECT 'Jerry', 'PositionSQL', 98
)

SELECT name, type, score
-- ROW_NUMBER
, ROW_NUMBER() OVER(PARTITION BY type ORDER BY score DESC ) AS rw
, RANK() OVER(PARTITION BY type ORDER BY score DESC ) AS rk
, DENSE_RANK() OVER(PARTITION BY type ORDER BY score DESC ) AS drk
FROM test ORDER BY type, rw;

输出结果

tom Mysql99111
JerryMysql99211
GavinMysql98332
sqlercnMysql95443
sqkercnPositionSQL99111
tomPositionSQL99211
JerryPositionSQL98332
届ける言葉を今は育ててる
最后更新于 2023-06-07