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

Mysql常用函數(shù)之Rank排名函數(shù)詳解

 更新時(shí)間:2024年01月04日 10:37:34   作者:pan_mlpan  
這篇文章主要介紹了Mysql常用函數(shù)之Rank排名函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mysql中的排名函數(shù)

主要介紹一下mysql里面的排名函數(shù),涉及到的函數(shù)有以下幾個(gè):

rank()、dense_rank()、row_number()

1、準(zhǔn)備工作

建立一個(gè)rank表:

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

插入一些數(shù)據(jù):

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

表及數(shù)據(jù)的截圖:

2、rank() 函數(shù)

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

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

按照某字段的排序結(jié)果添加排名,但它是跳躍的、間斷的排名

(1)若按照分?jǐn)?shù)直接進(jìn)行排序的話,例如按照score進(jìn)行排名

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

SELECT score, rank() over(ORDER BY score desc) as 'Rank' 
FROM rank;

結(jié)果:

+------+---------+
| score|   Rank  |
+------+---------+
|  100 |       1 |
|  100 |       1 |
|  95  |       3 |
|  95  |       3 |
|  95  |       3 |
|  90  |       6 |
|  89  |       7 |
+------+---------+
7 rows in set (0.02 sec)

(2)若按照某個(gè)字段分區(qū)進(jìn)行排序的話,例如按照name進(jìn)行分區(qū),根據(jù)分?jǐn)?shù)進(jìn)行排名:

SELECT name , 
	score ,
	rank() over(partition by name ORDER BY score desc) as 'Rank' 
	FROM rank;

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

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

結(jié)果:

+------+------+---------+
| name | score|   Rank  |
+------+------+---------+
|  a   |  100 |       1 |
|  a   |  90  |       2 |
|  a   |  89  |       3 |
|  b   |  100 |       1 |
|  c   |  95  |       1 |
|  d   |  95  |       1 |
|  e   |  95  |       1 |
+------+------+---------+
7 rows in set (0.02 sec)

3、row_number() 函數(shù)

MySQL ROW_NUMBER()從8.0版開始引入了功能。這ROW_NUMBER()是一個(gè)窗口函數(shù)或分析函數(shù),它為從1開始應(yīng)用的每一行分配一個(gè)序號(hào)

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

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

例如還是根據(jù)分?jǐn)?shù)進(jìn)行排序

SELECT 
 row_number() OVER (
 ORDER BY score
 ) row_num,
 score
 FROM rank;

結(jié)果:

+-------+------+---------+
|row_num| score|   Rank  |
+------ +------+---------+
|  1    |  100 |       1 |
|  2    |  100 |       2 |
|  3    |  95  |       3 |
|  4    |  95  |       1 |
|  5    |  95  |       1 |
|  6    |  90  |       1 |
|  7    |  89  |       1 |
+-------+------+---------+
7 rows in set (0.02 sec)

其次,使用ROW_NUMBER()函數(shù)將行劃分為所有列的分區(qū)。對(duì)于每個(gè)唯一的行集,將重新開始行號(hào)。

SELECT 
    id,
    name,
    ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) AS row_num
FROM rank; 

結(jié)果:

+------+------+---------+
| id   | name | row_num |
+------+------+---------+
|    1 | a    |       1 |
|    2 | a    |       2 |
|    3 | a    |       3 |
|    4 | b    |       1 |
|    5 | c    |       1 |
|    6 | d    |       1 |
|    7 | e    |       1 |
+------+------+---------+
7 rows in set (0.02 sec)

4、dense_rank() 函數(shù)

dense 英語中指“稠密的、密集的”。dense_rank()是的排序數(shù)字是連續(xù)的、不間斷。當(dāng)有相同的分?jǐn)?shù)時(shí),它們的排名結(jié)果是并列的,例如,1,2,2,3。

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

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

例如,還是根據(jù)成績進(jìn)行排名:

SELECT score, dense_rank() over(ORDER BY score desc) as 'Rank' 
FROM rank;

結(jié)果:

+------+---------+
| score|   Rank  |
+------+---------+
|  100 |       1 |
|  100 |       1 |
|  95  |       2 |
|  95  |       2 |
|  95  |       2 |
|  90  |       3 |
|  89  |       4 |
+------+---------+
7 rows in set (0.02 sec)

若按照某個(gè)字段分區(qū)進(jìn)行排序的話,例如按照name進(jìn)行分區(qū),根據(jù)分?jǐn)?shù)進(jìn)行排名

SELECT name , 
	score ,
	dense_rank() over(partition by name ORDER BY score desc) as 'Rank' 
	FROM rank;

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

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

結(jié)果:

+------+------+---------+
| name | score|   Rank  |
+------+------+---------+
|  a   |  100 |       1 |
|  a   |  90  |       2 |
|  a   |  89  |       3 |
|  b   |  100 |       1 |
|  c   |  95  |       1 |
|  d   |  95  |       1 |
|  e   |  95  |       1 |
+------+------+---------+
7 rows in set (0.02 sec)

這數(shù)據(jù)可能不太明顯,如果再插入一條數(shù)據(jù):

insert into rank values(8,'a',90);

然后查詢,結(jié)果如下,與rank函數(shù)執(zhí)行的結(jié)果就可以看到區(qū)別了:

+------+------+---------+
| name | score|   Rank  |
+------+------+---------+
|  a   |  100 |       1 |
|  a   |  90  |       2 |
|  a   |  90  |       2 |
|  a   |  89  |       3 |
|  b   |  100 |       1 |
|  c   |  95  |       1 |
|  d   |  95  |       1 |
|  e   |  95  |       1 |
+------+------+---------+
7 rows in set (0.02 sec)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server

    解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowe

    有時(shí)候在登錄到MySQL服務(wù)器時(shí)會(huì)遇到1130錯(cuò)誤,這是因?yàn)闊o法連接到MySQL服務(wù)器或其他一些原因,這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • B-樹的插入過程介紹

    B-樹的插入過程介紹

    今天小編就為大家分享一篇關(guān)于B-樹的插入過程介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 有關(guān)mysql的一些小技巧

    有關(guān)mysql的一些小技巧

    有關(guān)mysql的一些小技巧,有需要的朋友可以參考下
    2013-02-02
  • MySQL的查詢計(jì)劃中ken_len的值計(jì)算方法

    MySQL的查詢計(jì)劃中ken_len的值計(jì)算方法

    本文首先介紹了MySQL的查詢計(jì)劃中ken_len的含義;然后介紹了key_len的計(jì)算方法;最后通過一個(gè)偽造的例子,來說明如何通過key_len來查看聯(lián)合索引有多少列被使用
    2017-02-02
  • MySQL數(shù)據(jù)庫索引完全指南

    MySQL數(shù)據(jù)庫索引完全指南

    索引是數(shù)據(jù)庫中用來提高數(shù)據(jù)檢索效率的數(shù)據(jù)結(jié)構(gòu),它類似于書籍的目錄,可以幫助用戶快速找到所需的數(shù)據(jù),而不必掃描整個(gè)數(shù)據(jù)集,這篇文章主要介紹了MySQL數(shù)據(jù)庫索引的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • MySQL用戶賬戶分類的使用

    MySQL用戶賬戶分類的使用

    MySQL 8.0.16引入用戶賬戶分類機(jī)制,通過SYSTEM_USER權(quán)限區(qū)分系統(tǒng)用戶和普通用戶,下面就來詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2025-11-11
  • SQL 優(yōu)化

    SQL 優(yōu)化

    SQL 優(yōu)化...
    2006-12-12
  • MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃

    MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃

    explain命令是查看查詢優(yōu)化器如何決定執(zhí)行查詢的主要方法。這篇文章重點(diǎn)給大家介紹MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃,感興趣的朋友一起看看吧
    2018-05-05
  • mysql 添加索引 mysql 如何創(chuàng)建索引

    mysql 添加索引 mysql 如何創(chuàng)建索引

    本文將介紹mysql 如何創(chuàng)建索引,需要的朋友可以參考下
    2012-11-11
  • 深入理解mysql事務(wù)與存儲(chǔ)引擎

    深入理解mysql事務(wù)與存儲(chǔ)引擎

    本文主要介紹了mysql事務(wù)與存儲(chǔ)引擎,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

泗水县| 徐州市| 天镇县| 油尖旺区| 金沙县| 梧州市| 敦化市| 嘉祥县| 宜兰市| 黔南| 邯郸市| 扎鲁特旗| 永济市| 定州市| 上林县| 武汉市| 方城县| 凤翔县| 长沙市| 错那县| 潼关县| 吉安市| 葵青区| 阆中市| 祁门县| 河间市| 竹山县| 东辽县| 乌鲁木齐县| 罗源县| 望城县| 克什克腾旗| 叶城县| 任丘市| 龙川县| 北宁市| 贡觉县| 金寨县| 闽清县| 龙州县| 铅山县|