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

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

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

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

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

一、rank()函數(shù)

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

語法結(jié)構(gòu):

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

PARTITION BY子句對(duì)結(jié)果集進(jìn)行分區(qū)。RANK()功能在分區(qū)內(nèi)執(zhí)行;ORDER BY子句按一個(gè)或多個(gè)列或表達(dá)式對(duì)分區(qū)內(nèi)的行進(jìn)行排序。

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

二、使用案例

數(shù)據(jù)準(zhǔn)備:

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);

表數(shù)據(jù):

在這里插入圖片描述

2.1、按成績(jī)進(jìn)行排名

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

兩個(gè)并列第一名后,下一個(gè)是第三名。

在這里插入圖片描述

上圖中over中沒有使用partition進(jìn)行分組,默認(rèn)都是同一組

2.2、獲取排名前五的數(shù)據(jù)

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子句按姓名將結(jié)果集分成多個(gè)分區(qū)。

然后,ORDER BY子句按分?jǐn)?shù)對(duì)結(jié)果集進(jìn)行排序。

在這里插入圖片描述

三、總結(jié)

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

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

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

下面表格總結(jié)了這三個(gè)函數(shù)的主要區(qū)別:

函數(shù)特點(diǎn)排名示例
ROW_NUMBER為每行分配唯一的數(shù)字1, 2, 3, 4, …
RANK相同的值共享相同的排名,排名會(huì)跳過數(shù)字1, 1, 3, 4, …
DENSE_RANK相同的值共享相同的排名,不跳過數(shù)字1, 1, 2, 3, …

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

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

相關(guān)文章

最新評(píng)論