首页 > 数据库 >sql排序函数 rank() / dense_rank()

sql排序函数 rank() / dense_rank()

时间:2022-09-30 10:55:10浏览次数:84  
标签:... dense Rank score rank sql 95

Rank排名函数

1、rank()

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

partition by子句按照对应字段将结果集分为多个分区,然后order by子句按分数对结果集进行排序

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

例:按照score进行排名

SELECT score, rank() over(ORDER BY score desc) as 'Rank' 
FROM rank;
-->
+------+---------+
| score|   Rank  |
+------+---------+
|  100 |       1 |
|  100 |       1 |
|  95  |       3 |
|  95  |       3 |
|  95  |       3 |
|  90  |       6 |
|  89  |       7 |
+------+---------+

按照name进行分区,根据分数进行排名

select name, score ,rank() over(partition by name, order by score desc) 'Rank'
from rankl;
​
+------+------+---------+
| name | score|   Rank  |
+------+------+---------+
|  a   |  100 |       1 |
|  a   |  90  |       2 |
|  a   |  89  |       3 |
|  b   |  100 |       1 |
|  c   |  95  |       1 |
|  d   |  95  |       1 |
|  e   |  95  |       1 |
+------+------+---------+

2、dense_rank()

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

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

例:leetcode178. 分数排名

select score, dense_rank() over(order by score desc) 'rankd'
from Scores
​
输入: 
Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
输出: 
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

标签:...,dense,Rank,score,rank,sql,95
From: https://www.cnblogs.com/phonk/p/16744160.html

相关文章

  • SQL数据分组后取第一条数据——PARTITION BY
    SQL 如下找状态=1的数据,按HospitalId,DeptId 组合并倒序排序,每组里面取第一条数据SELECT*FROM(SELECT*,ROW_NUMBER()OVER(......
  • SpringBoot之Mybatis开启SQL记录和Pagehelper
    配置mybatismybatis:#mapper路径mapper-locations:classpath:mapper/*.xmlconfiguration:#日志输出log-impl:org.apache.ibatis.logging.stdout.StdO......
  • 【Mysql】Host is blocked because of many connection errors;unblock with 'mysqlad
    错误原因:同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;解决方式:连接mysql,刷新记录报错host的文件mysql>flushho......
  • 抓包分析mysql
    原文链接,推荐关注作者一、查看客户端sql语句相关信息sudotcpdump-ianyport3306-ww.pacpsudotshark-iany-dtcp.port==3306,mysql-Tfields-emysql.query......
  • SQLServer的最大连接数
    http://t.zoukankan.com/qanholas-p-2450339.html 我们的程序只能够跟SQLServer建立101个连接 在连接字符串中加入代码:Pooling=true;MaxPoolSize=40000;MinPool......
  • linux初始化MySQL数据库
    1.停止MySQL  2.删除数据库中所有的文件及日志[root@localhost~]#rm-rf/var/lib/mysql/*#删除mysql目录下所以文件[root@localhost~]#rm-rf/var/log/mysqld.......
  • elasticsearch 支持sql 查询
    本次部署一共4个节点本次需要部署1个 Coordinator节点,3个Worker节点  一、Coordinator 节点部署 1、dockerrun-d-p8087:8080--nameprestostarburstdata......
  • 关系数据库标准语言SQL(1)
    SQL(StructuredQueryLanguage)结构化的查询语言,是关系数据库的标准语言。SQL是一个通用的、功能极强的关系数据数据库语言特点:1.综合统一(功能、数据操作)2.高度非过程化......
  • leetcode-sql-176 求部门第二高的薪水
    SQL架构Employee 表:+-------------+------+|ColumnName|Type|+-------------+------+|id|int||salary|int|+-------------+------+......
  • Oracle常用SQL
    【统计数据条数大于2的】  SELECTSERIAL_NUMBERFROMV_SIMPLE_ENTRUSTMANAGEMENT GROUPBYSERIAL_NUMBERHAVINGCOUNT(SERIAL_NUMBER)>2 【表注释查询】  SE......