日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决.

發(fā)布時間:2025/3/15 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决. 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL中沒有Rank排名函數(shù),當我們需要查詢排名時,只能使用MySQL數(shù)據(jù)庫中的基本查詢語句來查詢普通排名。盡管如此,可不要小瞧基礎(chǔ)而簡單的查詢語句,我們可以利用其來達到Rank函數(shù)一樣的高級排名效果。

在這里我用一個簡單例子來實現(xiàn)排名的查詢:

首先我們先創(chuàng)建一個我們需要進行高級排名查詢的players表,

CREATE INSERT INTO `players` (`pid`, `name`, `age`) VALUES (1, 'Samual', 25), (2, 'Vino', 20), (3, 'John', 20), (4, 'Andy', 22), (5, 'Brian', 21), (6, 'Dew', 24), (7, 'Kris', 25), (8, 'William', 26), (9, 'George', 23), (10, 'Peter', 19), (11, 'Tom', 20), (12, 'Andre', 20);

1、在MySQL中實現(xiàn)Rank普通排名函數(shù)

在這里,我們希望獲得一個排名字段的列,以及age的升序排列。所以我們的查詢語句將是:

SELECT pid, name, age, @curRank := @curRank + 1 AS rank FROM players p, ( SELECT @curRank := 0 ) q ORDER BY age | PID | NAME | AGE | RANK | |-----|---------|-----|------| | 10 | Peter | 19 | 1 | | 12 | Andre | 20 | 2 | | 2 | Vino | 20 | 3 | | 3 | John | 20 | 4 | | 11 | Tom | 20 | 5 | | 5 | Brian | 21 | 6 | | 4 | Andy | 22 | 7 | | 9 | George | 23 | 8 | | 6 | Dew | 24 | 9 | | 7 | Kris | 25 | 10 | | 1 | Samual | 25 | 11 | | 8 | William | 26 | 12 |

要在mysql中聲明一個變量,你必須在變量名之前使用@符號。FROM子句中的(@curRank := 0)部分允許我們進行變量初始化,而不需要單獨的SET命令。當然,也可以使用SET,但它會處理兩個查詢:

SET @curRank := 0; SELECT pid, name, age, @curRank := @curRank + 1 AS rank FROM players ORDER BY age

2、查詢以降序排列

首要按age的降序排列,其次按name進行排列,只需修改查詢語句加上ORDER BY和 DESC以及列名即可。

SELECT pid, name, age, @curRank := @curRank + 1 AS rank FROM players p, ( SELECT @curRank := 0 ) q ORDER BY age DESC, name | PID | NAME | AGE | RANK | |-----|---------|-----|------| | 8 | William | 26 | 1 | | 7 | Kris | 25 | 2 | | 1 | Samual | 25 | 3 | | 6 | Dew | 24 | 4 | | 9 | George | 23 | 5 | | 4 | Andy | 22 | 6 | | 5 | Brian | 21 | 7 | | 12 | Andre | 20 | 8 | | 3 | John | 20 | 9 | | 11 | Tom | 20 | 10 | | 2 | Vino | 20 | 11 | | 10 | Peter | 19 | 12 |

3、在MySQL中實現(xiàn)Rank普通并列排名函數(shù)

現(xiàn)在,如果我們希望為并列數(shù)據(jù)的行賦予相同的排名,則意味著那些在排名比較列中具有相同值的行應在MySQL中計算排名時保持相同的排名(例如在我們的例子中的age)。為此,我們使用了一個額外的變量。

SELECT pid, name, age, CASE WHEN @prevRank = age THEN @curRank WHEN @prevRank := age THEN @curRank := @curRank + 1 END AS rank FROM players p, (SELECT @curRank :=0, @prevRank := NULL) r ORDER BY age | PID | NAME | AGE | RANK | |-----|---------|-----|------| | 10 | Peter | 19 | 1 | | 12 | Andre | 20 | 2 | | 2 | Vino | 20 | 2 | | 3 | John | 20 | 2 | | 11 | Tom | 20 | 2 | | 5 | Brian | 21 | 3 | | 4 | Andy | 22 | 4 | | 9 | George | 23 | 5 | | 6 | Dew | 24 | 6 | | 7 | Kris | 25 | 7 | | 1 | Samual | 25 | 7 | | 8 | William | 26 | 8 |

如上所示,具有相同數(shù)據(jù)和排行的兩行或多行,它們都會獲得相同的排名。玩家Andre, Vino, John 和Tom都有相同的age,所以他們排名并列第二。下一個最高age的玩家(Brian)排名第3。這個查詢相當于MSSQL和ORACLE 中的DENSE_RANK()函數(shù)。

4、在MySQL中實現(xiàn)Rank高級并列排名函數(shù)

當使用RANK()函數(shù)時,如果兩個或以上的行排名并列,則相同的行都會有相同的排名,但是實際排名中存在有關(guān)系的差距。

SELECT pid, name, age, rank FROM (SELECT pid, name, age, @curRank := IF(@prevRank = age, @curRank, @incRank) AS rank, @incRank := @incRank + 1, @prevRank := age FROM players p, ( SELECT @curRank :=0, @prevRank := NULL, @incRank := 1 ) r ORDER BY age) s

這是一個查詢中的子查詢。我們使用三個變量(@incRank,@prevRank,@curRank)來計算關(guān)系的情況下,在查詢結(jié)果中我們已經(jīng)補全了因為并列而導致的排名空位。我們已經(jīng)封閉子查詢到查詢。這個查詢相當于MSSQL和ORACLE中的RANK()函數(shù)。

| PID | NAME | AGE | RANK | |-----|---------|-----|------| | 10 | Peter | 19 | 1 | | 12 | Andre | 20 | 2 | | 2 | Vino | 20 | 2 | | 3 | John | 20 | 2 | | 11 | Tom | 20 | 2 | | 5 | Brian | 21 | 6 | | 4 | Andy | 22 | 7 | | 9 | George | 23 | 8 | | 6 | Dew | 24 | 9 | | 7 | Kris | 25 | 10 | | 1 | Samual | 25 | 10 | | 8 | William | 26 | 12 |

在這里我們可以看到,Andre,Vino,John和Tom都有相同的age,所以他們排名并列第二。下一個最高年齡的球員(Brian)排名第6,而不是第3,因為有4個人并列排名在第2。

好的,我希望在這些例子后,能讓你了解RANK()和DENSE_RANK()之間的區(qū)別,并且知道在哪里應使用哪個查詢來獲取MySQL中的rank函數(shù)。


作者:風澈vio
鏈接:https://www.jianshu.com/p/bb1b72a1623e

總結(jié)

以上是生活随笔為你收集整理的mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩不卡中文字幕 | 99激情视频 | 噼里啪啦免费看 | 欧美午夜久久 | 免费毛片基地 | 亚洲最大成人在线 | 在线xxxx| 国产丰满大乳奶水在线视频 | 亚洲一级淫片 | 久久久久亚洲av无码a片 | 午夜视频在线 | 亚洲欧洲综合av | 伊人网国产 | 国产精品精品视频 | 日本熟妇色xxxxx日本免费看 | 亚洲第二页| 中文字幕丰满孑伦无码专区 | 国产精品欧美激情在线 | 欧美一区在线视频 | 黄色av一级片 | 亚洲综合激情五月久久 | 原创露脸88av | 成人午夜免费在线观看 | 国产精品日韩欧美一区二区三区 | 国产亚洲精品久久久 | 北条麻妃一区二区三区在线观看 | 国产视频一区在线观看 | 天天插插插 | 青青青手机在线视频 | 日韩欧美不卡视频 | 国产人妖一区二区三区 | 男女视频在线免费观看 | 四虎在线视频 | 亚洲一区二区三区91 | 日本不卡在线播放 | 国内自拍偷拍视频 | 国产网站免费在线观看 | 亚洲 激情 | 午夜男人的天堂 | 91久久国语露脸精品国产高跟 | 日韩一区二区影视 | 瑟瑟视频免费看 | 日韩精品在线观看中文字幕 | 激情五月在线 | 国产精品.www | 久久久精品久久久久久 | 色诱av手机版 | 日韩av高清在线播放 | 久久好色 | 亚洲av日韩av在线观看 | 91精品推荐 | 欧美日韩中文字幕在线视频 | 美女扒开下面让男人捅 | 亚洲国产免费av | 亚州av | 全黄性性激高免费视频 | 日本阿v视频 | 神马午夜不卡 | 奇米影视第四色7777 | www.毛片| 少妇献身老头系列 | 久久久久久国产 | 夜夜操夜夜摸 | 香蕉av一区二区三区 | 日本少妇18p | 一本色道久久综合亚洲 | 激情开心站 | 久久一区二区三区四区 | 影音先锋成人 | 国产欧美一区二区三区国产幕精品 | 国产精品第1页 | 男人与雌性宠物交啪啪 | 国产绳艺sm调教室论坛 | 少妇又紧又深又湿又爽视频 | 亚洲最大黄色 | 欧美高h | 欧美一级网站 | 欧美精品v国产精品v日韩精品 | 亚洲青色在线 | 中国亚洲老头同性gay男男… | 男操女视频网站 | 国产精品4p | 黄色三级生活片 | 国产中年熟女高潮大集合 | 欧美日本一道本 | 国产波霸爆乳一区二区 | 午夜网址 | 欧美黄色一级片视频 | 99视频导航 | 在线免费日韩 | 二区三区在线视频 | 国产中文字幕在线观看 | 豆花在线观看 | 欧美日韩亚洲一区 | 男人天堂国产 | 日本成人一区二区 | 97视频在线观看免费高清完整版在线观看 | 欧美一级一级一级 | 日韩av大片在线观看 |