欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

數據庫rank()分組排序函數的具體使用

 更新時間:2024年11月18日 11:33:53   作者:五月天的尾巴  
RANK()是MySQL數據庫中的一個窗口函數,它可以根據指定的排序列對數據進行排序,并為相同的值分配相同的排名,文中通過示例代碼介紹的非常詳細,感興趣的可以了解一下

RANK()是MySQL數據庫提供的一個窗口函數,用于對查詢結果進行排序并為每個行分配排名。它可以根據指定的排序列對數據進行排序,并返回唯一的排名值。

mysql、oracle、hive都支持rank()函數

一、rank()函數

RANK(): 用于對結果集中的行進行排名。RANK() 會為相同的值分配相同的排名,并在隨后排名中跳過相應的名次。 例如有兩個并列第一,則前兩名的排名都是1,第三個人的排名是3。

語法結構:

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

PARTITION BY子句對結果集進行分區(qū)。RANK()功能在分區(qū)內執(zhí)行;ORDER BY子句按一個或多個列或表達式對分區(qū)內的行進行排序。

注意,over()里頭的分組以及排序的執(zhí)行晚于 where 、group by、 order by 的執(zhí)行。

二、使用案例

數據準備:

create table `student`(
    id int(10) not null primary key,
    name varchar(20) not null,
    score int(10) not null
);

insert into `student` values(1,'a',100);
insert into `student` values(2,'b',100);
insert into `student` values(3,'c',95);
insert into `student` values(4,'d',95);
insert into `student` values(5,'e',95);
insert into `student` values(6,'a',90);
insert into `student` values(7,'a',89);

表數據:

在這里插入圖片描述

2.1、按成績進行排名

select *,rank() over(order by score desc) as `rank` from `student`;

兩個并列第一名后,下一個是第三名。

在這里插入圖片描述

上圖中over中沒有使用partition進行分組,默認都是同一組

2.2、獲取排名前五的數據

select * from (
  select name, score, rank() over (order by score desc) as `rank`
  from `student`
) a  where `rank` <=5;

在這里插入圖片描述

2.3、分組后再排名

select name,score,rank() over(partition by name order by score desc) as `rank`
from `student`;

首先,PARTITION BY子句按姓名將結果集分成多個分區(qū)。

然后,ORDER BY子句按分數對結果集進行排序。

在這里插入圖片描述

三、總結

在數據分析中,ROW_NUMBER()、RANK() 和 DENSE_RANK() 是非常有用的工具。它們可以幫助用戶快速對數據進行排名和分類分析。雖然這三種函數的作用相似,但因其在處理重復值時的行為不同,所以在使用時需要根據具體需求進行選擇。

3.1、row_number()、rank() 和 dense_rank() 的區(qū)別

  • ROW_NUMBER():為每一行分配唯一的行號,適合唯一標識需求。
  • RANK():為重復值分配相同的排名,并在后續(xù)排名中跳過名次,適合需要處理排名的場景。
  • DENSE_RANK():為重復值分配相同的排名,但不跳過名次,適合希望連續(xù)排名的場景。

下面表格總結了這三個函數的主要區(qū)別:

函數特點排名示例
ROW_NUMBER為每行分配唯一的數字1, 2, 3, 4, …
RANK相同的值共享相同的排名,排名會跳過數字1, 1, 3, 4, …
DENSE_RANK相同的值共享相同的排名,不跳過數字1, 1, 2, 3, …

具體請參考《row_number() over (partition by 分組列 order by 排序列 desc)、row_number() 函數、分組排序函數》、《dense_rank() 函數的使用》、《row_number()、rank() 和 dense_rank() 的區(qū)別、分組排序函數

到此這篇關于數據庫rank()分組排序函數的具體使用的文章就介紹到這了,更多相關數據庫rank()分組排序函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入解析NoSQL數據庫的分布式算法(圖文詳解)

    深入解析NoSQL數據庫的分布式算法(圖文詳解)

    這篇文章主要介紹了深入解析NoSQL數據庫的分布式算法,需要的朋友可以參考下
    2015-12-12
  • PostgreSQL8.3.3安裝方法

    PostgreSQL8.3.3安裝方法

    非安裝版的PostgreSQL8.3.3的首次使用經歷第一次用Postgre,已經是好多年以前了,隱約記得是在linux下邊,build半天,然后手動配置庫文件之類。
    2008-09-09
  • Doris?數據模型ROLLUP及前綴索引官方教程

    Doris?數據模型ROLLUP及前綴索引官方教程

    本文檔主要從邏輯層面,描述 Doris 的數據模型 ROLLUP 以及前綴索引的概念,以幫助用戶更好的使用 Doris 應對不同的業(yè)務場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Linux下mysql數據庫的創(chuàng)建導入導出 及一些基本指令

    Linux下mysql數據庫的創(chuàng)建導入導出 及一些基本指令

    這篇文章主要介紹了Linux數據庫的創(chuàng)建 導入導出 以及一些基本指令,需要的朋友可以參考下
    2019-08-08
  • Doris Join 優(yōu)化原理文檔詳解

    Doris Join 優(yōu)化原理文檔詳解

    這篇文章主要為大家介紹了Doris Join 優(yōu)化原理文檔詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • sqlsever2019文件創(chuàng)建與變量示例

    sqlsever2019文件創(chuàng)建與變量示例

    大家好,本篇文章主要講的是sqlsever2019文件創(chuàng)建與變量示例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • SQL注入原理與解決方法代碼示例

    SQL注入原理與解決方法代碼示例

    這篇文章主要介紹了SQL注入原理與解決方法代碼示例,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 連續(xù)序號的 sql語句

    連續(xù)序號的 sql語句

    連續(xù)序號的 sql語句,大家可以參考下,修改成自己的語句。
    2009-06-06
  • 如何在Navicat新建連接、新建數據庫以及導入數據庫

    如何在Navicat新建連接、新建數據庫以及導入數據庫

    Navicat是圖形化操作MySQL的強大工具,但是當數據庫的服務器沒有開放3306端口給辦公網絡時,在辦公網使用navicat連接數據庫是連不上的,下面這篇文章主要給大家介紹了關于如何在Navicat新建連接、新建數據庫以及導入數據庫的相關資料,需要的朋友可以參考下
    2023-05-05
  • 使用navicat連接虛擬機的數據庫進行操作詳細流程

    使用navicat連接虛擬機的數據庫進行操作詳細流程

    這篇文章主要給大家介紹了關于使用navicat連接虛擬機的數據庫進行操作詳細流程,使用Navicat連接虛擬機的數據庫,需要確保虛擬機和數據庫運行狀態(tài),獲取數據庫信息,包括類型、IP地址、端口號、用戶名和密碼,需要的朋友可以參考下
    2024-11-11

最新評論