Mysql8.0习题系列(八):窗口函数(一篇学会rank、dense_rank、row_number使用,超详细~)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql8.0习题系列(八):窗口函数(一篇学会rank、dense_rank、row_number使用,超详细~)

Mysql8.0习题系列

软件下载地址
提取码:7v7u
数据下载地址
提取码:e6p9


@TOC


1. 创建students数据表,如下

CREATE TABLE students(
id INT PRIMARY KEY AUTO_INCREMENT,
student VARCHAR(15),
points TINYINT
);

2. 向表中添加数据如下

INSERT INTO students(student,points)
VALUES
('张三',89),
('李四',77),
('王五',88),
('赵六',90),
('孙七',90),
('周八',88);

mysql8.0新增了窗口函数的功能,本例我们来讲一下排序函数的习题。

3. 分别使用RANK()、DENSE_RANK() 和 ROW_NUMBER()函数对学生成绩降序排列情况进行显示

3.1 rank()函数

rank函数返回序号,出现相同的值会跳过1、1、 3

mysql> select student, points,
    -> rank() over (order by points desc)
    -> from students;
+---------+--------+---------+
| student | points | rank    |
+---------+--------+---------+
| 赵六    |     90 |  1      |
| 孙七    |     90 |  1      |
| 张三    |     89 |  3      |
| 王五    |     88 |  4      |
| 周八    |     88 |  4      |
| 李四    |     77 |  6      |
+---------+--------+---------+
6 rows in set (0.00 sec)

3.2 dense_rank函数

dense_rank出现相同数据时候,返回1 1 2

mysql> select student, points,
    -> dense_rank() over (order by points desc)
    -> from students;
+---------+--------+---------+
| student | points | rank    |
+---------+--------+---------+
| 赵六    |     90 |  1      |
| 孙七    |     90 |  1      |
| 张三    |     89 |  2      |
| 王五    |     88 |  3      |
| 周八    |     88 |  3      |
| 李四    |     77 |  4      |
+---------+--------+---------+
6 rows in set (0.00 sec)

3.3 row_number

row_number函数对于相同的数据集不会并列,而是直接跳过

mysql> select student, points,
    -> row_number() over (order by points desc) as rank
    -> from students;
+---------+--------+---------+
| student | points | rank    |
+---------+--------+---------+
| 赵六    |     90 |  1      |
| 孙七    |     90 |  2      |
| 张三    |     89 |  3      |
| 王五    |     88 |  4      |
| 周八    |     88 |  5      |
| 李四    |     77 |  6      |
+---------+--------+---------+
6 rows in set (0.00 sec)
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
11天前
|
SQL Oracle 关系型数据库
MySQL窗口函数怎么用
这段内容介绍了如何使用窗口函数(Window Function)在 MySQL 8.x 中进行更高效、简洁的数据分析和计算。窗口函数允许我们在查询结果集的特定窗口(或分区)内执行计算,如聚合、排序和行号生成。文章以一个复杂的 SQL 查询作为示例,展示了如何使用窗口函数简化这个计算排名的过程。
|
6月前
|
关系型数据库 MySQL
MySQL8.0新特性之窗口函数学习
MySQL8.0新特性之窗口函数学习
88 0
|
11月前
|
SQL 数据挖掘 关系型数据库
MySQL8新特性窗口函数详解
MySQL8新特性窗口函数详解
228 0
|
SQL 存储 关系型数据库
Mysql数据库基础第八章:窗口函数和公用表表达式(CTE)
# 1.窗口函数 MySQL从8.0版本开始支持窗口函数。窗口函数的作用类似于在查询中对数据进行分组,不同的是,分组操作会把分组的结果聚合成一条记录,而窗口函数是将结果置于每一条数据记录中。
Mysql数据库基础第八章:窗口函数和公用表表达式(CTE)
|
6月前
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
66 1
|
13天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
8 0
|
6月前
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
22 0
LeetCode 136. 只出现一次的数字 Single Number
LeetCode 136. 只出现一次的数字 Single Number
LeetCode contest 177 5169. 日期之间隔几天 Number of Days Between Two Dates
LeetCode contest 177 5169. 日期之间隔几天 Number of Days Between Two Dates