mysql中的几种排名函数

news2024/11/25 20:17:35

mysql中的排名函数

mysql里面的排名函数,涉及有以下几个:

rank()dense_rank()row_number()

1、rank() 函数

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

该函数按照某字段的排序结果添加排名,但它是跳跃的、间断的排名

(1)若按照数值直接进行排序的话,例如按照分组统计的数量进行排名

         两个并列第一名后,下一个是第三名。

具体实例

select City,
RANK() over(ORDER BY COUNT(Id) DESC) 'rank',
COUNT(Id) num,IndustrySubGroupName from base_companyinfo 
WHERE IndustrySubGroupName='工业机器人'
GROUP BY City

查询结果

+---------------------+-----------------------+
|City	|rank	|num    |IndustrySubGroupName |
+---------------------+-----------------------+
|410100	|     1 |     4 |           工业机器人 |
|410883	|	  2 |     1 |           工业机器人 |
|410300	|     2 |     1	|           工业机器人 |
|410185	|     4 |     1 |           工业机器人 |
|410700	|     5 |	  1 |           工业机器人 |
|411000	|	  6 |	  1 |           工业机器人 |
+----------------------+----------------------+
6 rows in set (0.02 sec)

 (2)若按照某个字段分区进行排序的话,例如按照IndustrySubGroupName进行分区,再根据数值进行排名:

select City,
RANK() over(partition by IndustrySubGroupName ORDER BY COUNT(Id) DESC)  'rank',
COUNT(Id) num,IndustrySubGroupName from base_companyinfo 
 -- WHERE IndustrySubGroupName='工业机器人'
GROUP BY City
-- ORDER BY num desc
  • 首先,PARTITION BY子句按第二产业名称-IndustrySubGroupName将结果集分成多个分区。
  • 然后,ORDER BY子句按数值COUNT(Id)对结果集进行排序。

会得到与上面不一样的排名结果:

即:遇到不同IndustrySubGroupName分区,会重新计算该分区的排名

 

2、row_number() 函数

MySQL ROW_NUMBER()从8.0版开始引入了功能。这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应用的每一行分配一个序号

语法结构如下:

ROW_NUMBER() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]

3、dense_rank() 函数

dense_rank()是的排序数字是连续的、不间断。当有相同的分数时,它们的排名结果是并列的,例如,1,2,2,3。

语法结构:

DENSE_RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

具体实例

select City,
DENSE_RANK() over(ORDER BY COUNT(Id) DESC)  'rank',
COUNT(Id) num,IndustrySubGroupName from base_companyinfo 
 WHERE IndustrySubGroupName='工业机器人'
GROUP BY City
-- ORDER BY num desc

结果如下:

+---------------------+-----------------------+
|City	|rank	|num    |IndustrySubGroupName |
+---------------------+-----------------------+
|410100	|     1 |     4 |           工业机器人 |
|410883	|	  2 |     3 |           工业机器人 |
|410300	|     2 |     3	|           工业机器人 |
|410185	|     3 |     2 |           工业机器人 |
|410700	|     4 |	  1 |           工业机器人 |
|411000	|	  5 |	  0 |           工业机器人 |
+----------------------+----------------------+
6 rows in set (0.02 sec)

若按照某个字段分区进行排序的话,例如按照IndustrySubGroupName进行分区,根据数值进行排名,也是会并列显示

select City,
DENSE_RANK() over(partition by IndustrySubGroupName ORDER BY COUNT(Id) DESC)  'rank',
COUNT(Id) num,IndustrySubGroupName from base_companyinfo 
-- WHERE IndustrySubGroupName='工业机器人'
GROUP BY City
-- ORDER BY num desc

结果如下:

当从工业机器人,切换到特种机器人时,就成了另一个分区,排名会重新计算

+---------------------+-----------------------+
|City	|rank	|num    |IndustrySubGroupName |
+---------------------+-----------------------+
|410100	|     1 |     4 |           工业机器人 |
|410883	|	  2 |     3 |           工业机器人 |
|410300	|     2 |     3	|           工业机器人 |
|410185	|     3 |     2 |           工业机器人 |
|410700	|     1 |	  4 |           特种机器人 |
|411000	|	  2 |	  3 |           特种机器人 |
+----------------------+----------------------+
6 rows in set (0.02 sec)

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

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

相关文章

如何用 ChatGPT 的 Advanced Data Analysis 帮你采集数据?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 想采集网页数据却不会写 Python 爬虫&#xff1f;不会就不会吧&#xff0c;ChatGPT 会就可以了 &#x1f602; 问题描述 朋友最近遇到了一点儿…

thinkphp6 获取url路径中的应用名、控制器名、操作名

如果使用了多应用模式&#xff0c;可以通过下面的方法来获取当前应用 app(http)->getName(); 获取当前控制器 Request::controller(); 获取当前操作 Request::action(); 请求信息 ThinkPHP6.0完全开发手册 看云 ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上…

Ansible基础及模块

Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作&#xff0c;使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作 Ansible是基于模块工作的&#xff0c;它…

JZ64 求1+2+3+...+n

JZ64 求123…n //实例化对象时会自动调用构造函数 class Solution { public:class Sum{public://每调用一次构造函数 _sum加等一个数Sum(){_sum _i;_i;}};//Solution类的成员函数int Sum_Solution(int n){_i 1;_sum 0;//数n是几 我就构造几个对象//构造几个对象就会调用…

SVN报错fail to run the WC Db work queue associated with,清理失败,乱码的解决方式

替换掉 wc.db 文件即可 SVN报错fail to run the WC Db work queue associated with&#xff0c;清理失败&#xff0c;乱码的解决方式_svn failed to run the wc db-CSDN博客

Kubernetes 集群部署 Prometheus 和 Grafana

Kubernetes 集群部署 Prometheus 和 Grafana 文章目录 Kubernetes 集群部署 Prometheus 和 Grafana一.部署 node-exporter1.node-exporter 安装2.部署 node-exporter 二.部署Prometheus1.Prometheus 安装和配置&#xff08;1&#xff09;创建 sa 账号&#xff0c;对 sa 做 rbac…

智能物联网解决方案:蓝牙IOT主控模块打造高效监测和超低功耗

物联网蓝牙模块&#xff0c;无论单模&#xff0c;还是双模&#xff0c;或者双模音频的选择&#xff0c;如下文说描述&#xff1a; 蓝牙芯片模块市场的百花齐放&#xff0c;也带来的工程师在选型时碰到很大的困难&#xff0c;但是无论是做半成品&#xff0c;还是做成品&#xf…

Java GC 算法

一、概述 理解Java虚拟机垃圾回收机制的底层原理&#xff0c;是成为一个高级Java开发者的基本功。本文从底层的垃圾回收算法开始&#xff0c;着重去阐释不同垃圾回收器在算法设计和实现时的一些技术细节&#xff0c;去探索「why」这一部分&#xff0c;通过对比不同的垃圾回收算…

BAT020:将文本文档中多行文本拼接为;分隔的单行文本

引言&#xff1a;编写批处理程序&#xff0c;实现将文本文档中多行文本拼接为;分隔的单行文本。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【…

[软考中级]软件设计师-uml

事物 uml中有4中事物&#xff0c;结构事物&#xff0c;行为事物&#xff0c;分组事物和注释事物 结构事物是uml模型中的名词&#xff0c;通常是模型的静态部分&#xff0c;描述概念或物理元素 行为事物是uml的动态部分&#xff0c;是模型中的动词&#xff0c;描述了跨越时间…

记一次Hbase2.1.x历史数据数据迁移方案

查看待迁移的表 list_namespace_tables vaas_dwm2. 制作待迁移表“DWM_TRIP_PART”的快照 snapshot vaas_dwm:DWM_TRIP_PART,dwm_trip_part_snapshot3. 统计待迁移表数据总数 hbase org.apache.hadoop.hbase.mapreduce.RowCounter vaas_dwm:DWM_TRIP_PART

phantom3D模体

phantom是人头模型&#xff0c;分为2D和3D两种&#xff0c;matlab中可直接调用phantom(size)生成2D数据&#xff0c;如图1&#xff0c;而三维需要对应函数文件&#xff0c;下载&#xff1a;3D 图1 2D phantom 3D模体为一个椭球体&#xff0c;只能生成xyz三个方向相同维度的模…

2023年东数西算研究报告

第一章 行业概况 1.1 定义 “东数西算”是近年来在中国大数据和数据中心领域中引起广泛关注的一个概念&#xff0c;其背后的理念与国家级的资源优化配置战略紧密相连。这一概念是“全国一体化大数据中心协同创新体系”下的一个重要组成部分。该创新体系旨在推进技术、业务、数…

pdf压缩文件怎么压缩最小?pdf压缩方法汇总

PDF是一种常见的文件格式&#xff0c;通常用于电子文档和印刷品&#xff0c;由于PDF文件通常包含大量的元数据、字体、图像和其他元素&#xff0c;因此它们的大小可能会非常大。 为了解决这个问题&#xff0c;我们可以使用一些PDF压缩工具来帮助我们&#xff0c;以便我们能够更…

Springcloud笔记(2)-Eureka服务注册中心

Eureka服务注册 Eureka作为一个微服务的治理中心&#xff0c;它是一个服务应用&#xff0c;可以接收其他服务的注册&#xff0c;也可以发现和治理服务实例。 服务治理中心是微服务&#xff08;分布式&#xff09;架构中最基础和最核心的功能组件&#xff0c;它主要对各个服务…

强缓存和协商缓存

强缓存和协商缓存 缓存分为强缓存和协商缓存。强缓存不过服务器&#xff0c;协商缓存需要过服务器&#xff0c;协商缓存返回的状态码是304。两类缓存机制可以同时存在&#xff0c;强缓存的优先级高于协商缓存。当执行强缓存时&#xff0c;如若缓存命中&#xff0c;则直接使用缓…

京东数据平台:2023年9月京东洗衣机行业品牌销售排行榜

鲸参谋监测的京东平台9月份洗衣机市场销售数据已出炉&#xff01; 9月份洗衣机行业销售呈下滑状态。鲸参谋数据显示&#xff0c;9月京东平台洗衣机的总销量为116万&#xff0c;环比下滑约1%&#xff0c;同比下滑约13%&#xff1b;月销售额为17亿&#xff0c;环比下滑约7%&…

【漏洞复现】安全云平台存在任意文件下载getshell

漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

SQL Server修改表结构

在SQL Server中修改的关键字是 ALTER(改变;(使)更改;修改(衣服使更合身);改动&#xff09; 列操作 添加列 添加列操作 alter tabel 表名 add 列名 数据类型--给员工表添加一个邮箱 alter的翻译是&#xff08;改变&#xff09; alter table people add PeopleMail varchar(2…

Chrome插件精选 — 鼠标手势插件

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件记录下比较好用的一款或几款&#xff0c;便于节省尝试的时间和精力。 下面是两款比较好用的鼠标手势插件&#xff0c;支持很多设置选项&#xff0c;可以自定义手势&…