最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之dense_rank()分組排序函數的使用

 更新時間:2024年11月18日 11:36:03   作者:五月天的尾巴  
DENSE_RANK()是一種窗口函數,用于在數據庫中計算密集等級,本文就來介紹一下MySQL之dense_rank()分組排序函數的使用,感興趣的可以了解一下

DENSE_RANK()是一種窗口函數,用于在數據庫中計算密集等級。它為每個行分配一個密集等級,并根據指定的排序順序進行排列。比如:如果有兩個排名為1的值,接下來的值將會被標記為2,而不是3。

一、dense_rank() 函數

DENSE_RANK() 也是一個窗口函數,用于為結果集中的每一行分配排名。DENSE_RANK() 在遇到相同的排序值時,會為相同的行分配相同的排名,并且下一個排名不會跳過。換句話說,如果有兩個排名為1的值,接下來的值將會被標記為2,而不是3。

語法結構:

DENSE_RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 
  • PARTITION BY:用于將結果集分區(qū),針對每個分區(qū)單獨排名。
  • ORDER BY:指定排序的列,決定了排名的依據。

注意,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 *,dense_rank() over(order by score desc) as dr from `student`;

兩個并列第一名后,下一個是第二名,不會跳過排名。

在這里插入圖片描述

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

2.2、獲取排名前五的數據

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

在這里插入圖片描述

2.3、分組后再排名

select name,score,dense_rank() over(partition by name order by score desc) as dr
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() 函數、分組排序函數》、《數據庫rank()分組排序函數詳解》、《row_number()、rank() 和 dense_rank() 的區(qū)別、分組排序函數

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

相關文章

最新評論

高尔夫| 蓬安县| 久治县| 明溪县| 丁青县| 望江县| 寻乌县| 利辛县| 襄樊市| 遵化市| 双江| 社旗县| 赞皇县| 唐海县| 正定县| 历史| 思茅市| 嘉义市| 翁源县| 德州市| 湛江市| 句容市| 区。| 屏东县| 华蓥市| 沈阳市| 收藏| 资源县| 宜章县| 鄂尔多斯市| 文安县| 平陆县| 简阳市| 盖州市| 惠来县| 老河口市| 五指山市| 托克托县| 色达县| 二连浩特市| 商洛市|