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

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

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

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

一、dense_rank() 函數(shù)

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

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

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

注意,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ìn)行排名

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

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

在這里插入圖片描述

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

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

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

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

在這里插入圖片描述

三、總結(jié)

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

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

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

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

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

具體請參考《row_number() over (partition by 分組列 order by 排序列 desc)、row_number() 函數(shù)、分組排序函數(shù)》、《數(shù)據(jù)庫rank()分組排序函數(shù)詳解》、《row_number()、rank() 和 dense_rank() 的區(qū)別、分組排序函數(shù)

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

相關(guān)文章

  • MySQL之Explain詳解

    MySQL之Explain詳解

    使用Explain關(guān)鍵字可以模擬優(yōu)化器執(zhí)行SQL語句,分析你的查詢語句或是結(jié)構(gòu)的性能瓶頸,感興趣的的同學(xué)可以參考閱讀
    2023-04-04
  • Windws?MySQL?8.4?LTS的安裝

    Windws?MySQL?8.4?LTS的安裝

    本文主要介紹了Windws?MySQL?8.4?LTS的安裝,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧

    MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧

    這篇文章主要介紹了MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧,需要的朋友可以參考下
    2016-09-09
  • MySql創(chuàng)建帶解釋的表及給表和字段加注釋的實(shí)現(xiàn)代碼

    MySql創(chuàng)建帶解釋的表及給表和字段加注釋的實(shí)現(xiàn)代碼

    這篇文章主要介紹了MySql創(chuàng)建帶解釋的表以及給表和字段加注釋的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • mysql密碼忘記后如何修改密碼(2022年最新版詳細(xì)教程保姆級)

    mysql密碼忘記后如何修改密碼(2022年最新版詳細(xì)教程保姆級)

    因?yàn)殚L時(shí)間不操作mysql而忘記root密碼的朋友估計(jì)不在少數(shù),下面這篇文章主要給大家介紹了關(guān)于mysql密碼忘記后如何修改密碼的相關(guān)資料,本教程是2022年最新版詳細(xì)教程保姆級,需要的朋友可以參考下
    2022-04-04
  • MySQL count(1)、count(*)、count(字段)的區(qū)別

    MySQL count(1)、count(*)、count(字段)的區(qū)別

    COUNT在數(shù)據(jù)庫行數(shù)統(tǒng)計(jì)中被廣泛使用,那么你知道MySQL count(1)、count(*)、count(字段)的區(qū)別嗎,本文就想的介紹一下,感興趣的可以了解一下
    2021-12-12
  • Mysql中校對集utf8_unicode_ci與utf8_general_ci的區(qū)別說明

    Mysql中校對集utf8_unicode_ci與utf8_general_ci的區(qū)別說明

    一直對utf8_unicode_ci與utf8_general_ci這2個(gè)校對集很迷惑,今天查了手冊有了點(diǎn)眉目。不過對中文字符集來說采用utf8_unicode_ci與utf8_general_ci時(shí)有何區(qū)別還是不清楚
    2012-03-03
  • 如何使Mysql自動(dòng)生成序號列,序號自動(dòng)增長問題

    如何使Mysql自動(dòng)生成序號列,序號自動(dòng)增長問題

    這篇文章主要介紹了如何使Mysql自動(dòng)生成序號列,序號自動(dòng)增長問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SQL中笛卡爾積的實(shí)際應(yīng)用

    SQL中笛卡爾積的實(shí)際應(yīng)用

    笛卡爾積算法,又稱為笛卡爾積枚舉法,是一種枚舉算法,用于在兩個(gè)或多個(gè)集合之間枚舉所有可能的組合,這篇文章主要給大家介紹了關(guān)于SQL中笛卡爾積的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹

    MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹

    這篇文章主要介紹了MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹的相關(guān)資料,wait_timeout是MySQL中用于控制非交互式連接等待時(shí)間的系統(tǒng)變量,影響服務(wù)器資源管理和安全性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12

最新評論