常见的四种排名函数的用法(sql)

news2024/11/19 6:30:59

四个排名函数:
1.row_number
2.rank
3.dense_rank
4.ntile

1. ROW_NUMBER(排名场景推荐)

1.1 介绍

在 SQL 中,ROW_NUMBER() 是一个窗口函数,它为结果集中的每一行分配一个唯一的序号。该函数的语法如下:

ROW_NUMBER() OVER (ORDER BY column1 [, column2, ...])

其中,ORDER BY 子句指定了 ROW_NUMBER() 函数排列行的顺序。如果省略 ORDER BY,则序号将按照结果集中的任意顺序进行分配。

1.2 使用场景及例子

1.2.1 排名
通过order by进行排序得到排名。

SELECT
	id,
	name,
	score,
	row_number() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

在这里插入图片描述

1.2.2 去重
可以使用 ROW_NUMBER() 函数去除重复记录。例如,在一个表中,有重复记录,想要保留每个记录的唯一编号

SELECT id, column1, column2, ...
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY id) AS row_num
    FROM table_name
) subquery
WHERE row_num = 1;

1.2.3 分页查询
大可不必,不建议使用。

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY id) AS row_num
    FROM table_name
) subquery
WHERE row_num BETWEEN 11 AND 20;

2. RANK

2.1 介绍

在SQL中,RANK()是一个窗口函数,用于根据指定的ORDER BY子句给结果集中的每一行分配排名值。在排序过程中,如果有多个行具有相同的排序值,则它们将被分配相同的排名值。RANK()可以在SELECT语句的SELECT子句、ORDER BY子句或OVER()子句中使用。

以下是RANK()的语法:

RANK() OVER ( [PARTITION BY partition_expression, ... [n]]
ORDER BY sort_expression [ASC|DESC], ... [n] )

在这个语法中,PARTITION BY子句可选,它用于将结果集分割成不同的分区,然后对每个分区的行进行排名。如果省略PARTITION BY,则所有行将合并成一个分区,然后进行排名。
排序表达式是必需的,可以指定一个或多个表达式以排序行。SORT_EXPRESSION可以是列名称、函数、常量或表达式。

2.2 使用场景及例子

2.2.1 排名
通过order by进行排序得到排名。

SELECT
	id,
	name,
	score,
	RANK() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

在这里插入图片描述
2.2.2 分组排名

SELECT
	id,
	name,
	score,
	RANK() OVER(PARTITION BY name
	ORDER BY score DESC) AS ranks
FROM
	student_info

在这里插入图片描述
PARTITION BY子句指定了name列作为分区表达式,ORDER BY子句按score列降序排序。

但使用RANK排名有个问题,即字段内容相同时,会得到相同名次,并且后续会跳过几个名次,如图:
在这里插入图片描述

3. DENSE_RANK

3.1 介绍

DENSE_RANK()是SQL中的一个窗口函数(window function),用于查询结果中的排名。与RANK()类似,不同之处在于DENSE_RANK()不会出现相同的排名。即使有多个值排名相同,紧随其后的排名也会按照定义进行递增。解决RANK的问题。

3.2 使用场景及例子

3.2.1 排名
通过order by进行排序得到排名。

SELECT
	id,
	name,
	score,
	DENSE_RANK() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

在这里插入图片描述

4. NTILE

4.1 介绍

NTILE函数用于将一组数据按照数量均匀地分成若干份,并给每份数据编号。常见的用途是将数据进行分组或划分。
语法:

NTILE(n) OVER (ORDER BY expr)

其中n:指定将数据分成的份数。ORDER BY expr:指定按照哪个表达式来进行排序。

4.2 使用场景及例子

4.2.1 排名
通过order by进行排序得到排名。

SELECT
	id,
	name,
	score,
	NTILE(4) OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内网渗透之横向移动PTHPTTPTK

0x00前言 pass the hash(哈希传递攻击,简称pth) pass the ticket(票据传递攻击,简称ptt) pass the key(密钥传递攻击,简称ptk) PTH(pass the hash) #利用的lm或ntlm的值…

【社区图书馆】 Go佬—Go程序开发实战宝典书评

文章目录 前言内容介绍文章大致划分总结 前言 《Go 程序开发实战宝典》是一本非常实用的 Go 语言开发工具书,本书由深入浅出的案例讲解、详细的技术实现、贴近实际的应用开发等组成,非常适合 Go 语言开发爱好者、从事相关行业的工程师、技术负责人以及深…

ThinkPHP视图

ThinkPHP视图 前言视图一、运算符二、模版函数三、循环标签四,volist 循环标签五,if 判断标签六,switch 判断标签七、包含文件八、其他标签1. 条件标签2. 比较标签3. 循环标签4. 杂项标签 总结 前言 ThinkPHP视图基本语法和PHP语法非常的像,所…

React Native 9个好用的开发工具盘点

近几年在大前端的开发领域,选择跨端方案的公司和部门越来越多,曾一何时市面有不下10种跨端框架,但随着“生物进化论”的推动,目前市面上仅剩两种主流方案,就是经常听到的 React Native 和 Flutter。去年终于引来了 Rea…

企业网络安全漏洞分析及其解决_kaic

摘要 为了防范网络安全事故的发生,互联网的每个计算机用户、特别是企业网络用户,必须采取足够的安全防护措施,甚至可以说在利益均衡的情况下不惜一切代价。事实上,许多互联网用户、网管及企业老总都知道网络安全的要性,却不知道网…

《JavaEE初阶》多线程进阶

《JavaEE初阶》多线程进阶 文章目录 《JavaEE初阶》多线程进阶常见锁策略乐观锁与悲观锁普通互斥锁与读写锁轻量级锁与重量级锁自旋锁与挂起等待锁公平锁和非公平锁可重入锁和不可重入锁 CAS什么是CASCAS的应用场景:CAS 的 ABA 问题什么是CAS 的 ABA 问题解决方案: synchronize…

libxml2交叉编译和移植

编译后的libxml2如果交叉编译环境一致可以直接使用资源-CSDN文库 嵌入式开发过程中实用libxml2进行xml文件的解析、创建、使用。 这里介绍一下该libxml2的交叉编译过程和移植步骤 下载地址 libxml2 各版本下载地址 ftp://xmlsoft.org/libxml2/ ftp://xmlsoft.org/libxml2…

【汽车电子】5分钟了解汽车操作系统(科普篇)

在智能汽车电动汽车的浪潮下,「软件定义汽车」的理念已经成为很多厂家的共识,未来决定汽车个性化差异的不再是马力大小、座椅材质、底盘软硬等,而应该是人工智能、大数据和云计算技术的综合体。 要想实现这一切,就要给汽车安装一个…

【论文简述】WT-MVSNet: Window-based Transformers forMulti-view Stereo(arxiv 2023)

一、论文简述 1. 第一作者:Jinli Liao、Yikang Ding 2. 发表年份:2023 3. 发表期刊:arxiv 4. 关键词:MVS、3D重建、Transformer、极线、几何约束 5. 探索动机:然而,在没有极几何约束的情况下匹配参考图…

【Java数据结构】二叉树

二叉树 树型结构概念树中的概念树的表现形式 二叉树两种特殊的二叉树二叉树的性质二叉树的存储二叉树基本操作 树型结构 概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像…

读论文--Token Merging for Fast Stable Diffusion(用于快速Diffusion模型的tome技术)

摘要 The landscape of image generation has been forever changed by open vocabulary diffusion models. However, at their core these models use transformers, which makes generation slow. Better implementations to increase the throughput of these transformers …

JMeter的使用(一)

JMeter的使用 参考黑马视频 下载工具 一、准备工作 1、准备文件sql SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for sys_follow_user -- ---------------------------- DROP TABLE IF EXISTS sys_follow_user; CR…

Html5惯性小鸟游戏制作与分享(怀旧小游戏)

当年电子词典中的经典游戏,后来出了无数变种的玩法。这里还原了最初的玩法与操作。实现了这一款有点难度“的怀旧经典游戏。 玩法也很简单,不用碰到任何东西、持续下去。。。 可以进行试玩,手机玩起来效果会更好些。 点击试玩 还有很多变种的…

网络安全SQL注入

1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注…

发送结构化的网络消息数据

server.cpp #define WIN32_LEAN_AND_MEAN //尽力减少一些其他依赖库的引用 #define _WINSOCK_DEPRECATED_NO_WARNINGS#include<windows.h> #include<WinSock2.h> #include<stdio.h> //#pragma comment(lib,"ws2_32.lib")struct DataPackage {int …

HTTP Keep-Alive模式

故事发生在10月份的一次面试经历中&#xff0c;本来我不想说出来丢人显眼&#xff0c;但是为了警醒自己和告诫后人&#xff0c;我决定写成博文发出来。因为在面试过程中&#xff0c;我讲在2009年写过QQ农场助手&#xff0c;在这期间深入学习了HTTP协议&#xff0c;而且在2010-0…

盐湖钛系提锂吸附剂

#盐湖钛系提锂吸附剂 盐湖钛系提锂吸附剂HPL900是一种高选择性高容量锂离子筛吸附剂。其通过纳米杂化、锂离子印迹等技术制备而成。该吸附剂活性纳米晶粒子对锂离子具有高效吸附性能&#xff08;其对锂的吸附容量大于10.0g Li/L&#xff09;&#xff0c;同时吸附位点对锂离子具…

哈希表(底层结构剖析-- 上)

文章目录 哈希表底层结构剖析哈希概念哈希冲突哈希函数 哈希冲突解决办法闭散列( 线性探测 二次探测)开散列 哈希表闭散列方法的模拟实现基本框架有关哈希数据的类插入函数删除函数查找函数增加仿函数将所有数据类型转换为整型 哈希表开散列方法的模拟实现(增加仿函数版) 哈希…

Visual Studio的安装注意

本文目前包含的内容&#xff1a; Visual Studio版本选择工作负载组建的选择安装后的环境配置 目录 1. 安装前1. 安装过程中2. 安装后注意 1. 安装前 安装版本选择&#xff1a; 一定不要选最新的版本&#xff0c;选3-5年前的稳定版本&#xff01;新版本会出很多bug。 1. 安装过…

银行数字化转型导师坚鹏:银行数字化转型创新与应用前沿

银行数字化转型创新与应用前沿 ——金融科技如何赋能银行数字化转型 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚5G如何赋能银行数字化转型&#xff1f; 不清楚最新金融科技如何赋能银行数字化转型&#xff1f; 不了解银行…