窗口分析函数19_Mysql查询窗口函数里第一个最后一个第N个元素的值值案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)

Posted ShenLiang2025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗口分析函数19_Mysql查询窗口函数里第一个最后一个第N个元素的值值案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)相关的知识,希望对你有一定的参考价值。

mysql查询窗口函数之按序号取元素详解

需求概述

查询以课程(course)分区以分数(score)逆序的窗口里的第一个、最后一个和第2个元素对应的值。示例表数据见下:

SELECT '数学' course, 40 score, '张三' name UNION
SELECT  '数学' course,  60 score, '李四' name UNION
SELECT  '数学' course, 70 score, '王二' name UNION
SELECT  '数学' course, 55 score,  '赵钱' name UNION
SELECT  '英语' course,  65 score,  '张三' name UNION
SELECT  '英语' course,  70 score, '李四' name UNION
SELECT  '语文' course,  83 score, '张三' name

问题分析

该需求需要借助窗口函数的FIRST_VALUE、LAST_VALUE、NTH_VALUE函数来实现,其中针对窗口里的最后一个元素需要界定它的范围。

SQL代码

SELECT FIRST_VALUE(score) OVER w first_value,
LAST_VALUE(score) OVER w as last_value,

LAST_VALUE(score) OVER (
 PARTITION BY course
        ORDER BY score DESC
RANGE BETWEEN
     UNBOUNDED PRECEDING AND
            UNBOUNDED FOLLOWING) reallast_value,

NTH_VALUE(score,3) OVER w as nth_value,
score,
course
FROM
(
SELECT '数学' course, 40 score, '张三' name UNION
SELECT  '数学' course,  60 score, '李四' name UNION
SELECT  '数学' course, 70 score, '王二' name UNION
SELECT  '数学' course, 55 score,  '赵钱' name UNION
SELECT  '英语' course,  65 score,  '张三' name UNION
SELECT  '英语' course,  70 score, '李四' name UNION
SELECT  '语文' course,  83 score, '张三' name 
)A
WINDOW w AS (PARTITION BY course order by score DESC)

执行结果

以上是关于窗口分析函数19_Mysql查询窗口函数里第一个最后一个第N个元素的值值案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)的主要内容,如果未能解决你的问题,请参考以下文章

TiDB 是不是计划支持窗口函数?

MySQL/ Hive:使用窗口或分析函数连接条件行

MySQL窗口函数_聚合函数

MySql窗口函数

MySQL窗口函数基础初试

MySQL窗口函数,你最熟悉的陌生人~