好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 總結幾種MySQL中常見的排名問題

總結幾種MySQL中常見的排名問題

熱門標簽:申請400電話電話價格 廣東400企業(yè)電話申請流程 新鄉(xiāng)智能外呼系統(tǒng)好處 許昌外呼增值業(yè)務線路 地圖標注客戶付款 石家莊400電話辦理公司 宜賓全自動外呼系統(tǒng)廠家 咸陽防封電銷卡 臨沂做地圖標注

前言:

在某些應用場景中,我們經(jīng)常會遇到一些排名的問題,比如按成績或年齡排名。排名也有多種排名方式,如直接排名、分組排名,排名有間隔或排名無間隔等等,這篇文章將總結幾種MySQL中常見的排名問題。

創(chuàng)建測試表

create table scores_tb (
 id int auto_increment primary key,
 xuehao int not null, 
 score int not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into scores_tb (xuehao,score) values (1001,89),(1002,99),(1003,96),(1004,96),(1005,92),(1006,90),(1007,90),(1008,94);

# 查看下插入的數(shù)據(jù)
mysql> select * from scores_tb;
+----+--------+-------+
| id | xuehao | score |
+----+--------+-------+
| 1 | 1001 | 89 |
| 2 | 1002 | 99 |
| 3 | 1003 | 96 |
| 4 | 1004 | 96 |
| 5 | 1005 | 92 |
| 6 | 1006 | 90 |
| 7 | 1007 | 90 |
| 8 | 1008 | 94 |
+----+--------+-------+

1.普通排名

按分數(shù)高低直接排名,從1開始,往下排,類似于row number。下面我們給出查詢語句及排名結果。

# 查詢語句
SELECT xuehao, score, @curRank := @curRank + 1 AS rank
FROM scores_tb, (
SELECT @curRank := 0
) r
ORDER BY score desc;

# 排序結果
+--------+-------+------+
| xuehao | score | rank |
+--------+-------+------+
| 1002 | 99 | 1 |
| 1003 | 96 | 2 |
| 1004 | 96 | 3 |
| 1008 | 94 | 4 |
| 1005 | 92 | 5 |
| 1006 | 90 | 6 |
| 1007 | 90 | 7 |
| 1001 | 89 | 8 |
+--------+-------+------+

上述查詢語句中,我們申明了一個變量 @curRank ,并將此變量初始化為0,查得一行將此變量加一,并以此作為排名。我們看到這類排名是沒間隔的并且有些分數(shù)相同但排名不同。

2.分數(shù)相同,名次相同,排名無間隔

# 查詢語句
SELECT xuehao, score, 
CASE
WHEN @prevRank = score THEN @curRank
WHEN @prevRank := score THEN @curRank := @curRank + 1
END AS rank
FROM scores_tb, 
(SELECT @curRank :=0, @prevRank := NULL) r
ORDER BY score desc;

# 排名結果
+--------+-------+------+
| xuehao | score | rank |
+--------+-------+------+
| 1002 | 99 | 1 |
| 1003 | 96 | 2 |
| 1004 | 96 | 2 |
| 1008 | 94 | 3 |
| 1005 | 92 | 4 |
| 1006 | 90 | 5 |
| 1007 | 90 | 5 |
| 1001 | 89 | 6 |
+--------+-------+------+

3.并列排名,排名有間隔

另外一種排名方式是相同的值排名相同,相同值的下一個名次應該是跳躍整數(shù)值,即排名有間隔。

# 查詢語句
SELECT xuehao, score, rank FROM
(SELECT xuehao, score,
@curRank := IF(@prevRank = score, @curRank, @incRank) AS rank, 
@incRank := @incRank + 1, 
@prevRank := score
FROM scores_tb, (
SELECT @curRank :=0, @prevRank := NULL, @incRank := 1
) r
ORDER BY score desc) s;
# 排名結果
+--------+-------+------+
| xuehao | score | rank |
+--------+-------+------+
| 1002 | 99 | 1 |
| 1003 | 96 | 2 |
| 1004 | 96 | 2 |
| 1008 | 94 | 4 |
| 1005 | 92 | 5 |
| 1006 | 90 | 6 |
| 1007 | 90 | 6 |
| 1001 | 89 | 8 |
+--------+-------+------+

上面介紹了三種排名方式,實現(xiàn)起來還是比較復雜的。好在MySQL8.0增加了窗口函數(shù),使用內置函數(shù)可以輕松實現(xiàn)上述排名。

MySQL8.0 利用窗口函數(shù)實現(xiàn)排名

MySQL8.0中可以利用 ROW_NUMBER(),DENSE_RANK(),RANK() 三個窗口函數(shù)實現(xiàn)上述三種排名,需要注意的一點是as后的別名,千萬不要與前面的函數(shù)名重名,否則會報錯,下面給出這三種函數(shù)實現(xiàn)排名的案例:

# 三條語句對于上面三種排名
select xuehao,score, ROW_NUMBER() OVER(order by score desc) as row_r from scores_tb;
select xuehao,score, DENSE_RANK() OVER(order by score desc) as dense_r from scores_tb;
select xuehao,score, RANK() over(order by score desc) as r from scores_tb;

# 一條語句也可以查詢出不同排名
SELECT xuehao,score,
 ROW_NUMBER() OVER w AS 'row_r',
 DENSE_RANK() OVER w AS 'dense_r',
 RANK()  OVER w AS 'r'
FROM `scores_tb`
WINDOW w AS (ORDER BY `score` desc);

# 排名結果
+--------+-------+-------+---------+---+
| xuehao | score | row_r | dense_r | r |
+--------+-------+-------+---------+---+
| 1002 | 99 |  1 |  1 | 1 |
| 1003 | 96 |  2 |  2 | 2 |
| 1004 | 96 |  3 |  2 | 2 |
| 1008 | 94 |  4 |  3 | 4 |
| 1005 | 92 |  5 |  4 | 5 |
| 1006 | 90 |  6 |  5 | 6 |
| 1007 | 90 |  7 |  5 | 6 |
| 1001 | 89 |  8 |  6 | 8 |
+--------+-------+-------+---------+---+

總結:

本文給出三種不同場景下實現(xiàn)統(tǒng)計排名的SQL,可以根據(jù)不同業(yè)務需求選取合適的排名方案。對比MySQL8.0,發(fā)現(xiàn)利用窗口函數(shù)可以更輕松實現(xiàn)排名,其實業(yè)務需求遠遠比我們舉的示例要復雜許多,用SQL實現(xiàn)此類業(yè)務需求還是需要慢慢積累的。

以上就是總結幾種MySQL中常見的排名問題的詳細內容,更多關于MySQL 排名的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MYSQL實現(xiàn)排名及查詢指定用戶排名功能(并列排名功能)實例代碼
  • Mysql排序獲取排名的實例代碼
  • MySQL頁面訪問統(tǒng)計及排名情況
  • MySQL中給自定義的字段查詢結果添加排名的方法
  • mysql分組取每組前幾條記錄(排名) 附group by與order by的研究

標簽:日照 貴州 鷹潭 鎮(zhèn)江 臺灣 北京 阜新 合肥

巨人網(wǎng)絡通訊聲明:本文標題《總結幾種MySQL中常見的排名問題》,本文關鍵詞  總結,幾種,MySQL,中,常見,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《總結幾種MySQL中常見的排名問題》相關的同類信息!
  • 本頁收集關于總結幾種MySQL中常見的排名問題的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 无码 VR 无线一区 视频| 韩国片婬乱一级毛片a| 百合gl高黄高肉做到哭| japanesefree高清日本野外| 白丝jk美女被视频网站| 一级片免费网址| 99热网| 红桃视频国产AV| 美女激情诱惑| 粗暴重口尿交| 三上悠亚全部番号作品| 精品少妇一区二区三区在线| 国产精品久久久亚洲动漫| 成人综合久久综合| 天堂色在线| 公和熄三级中字电影久久| 亚洲精品高清中文字幕完整版| 好大好爽快点我要| 91精品一卡2卡3卡4卡国色| 日韩特黄特色大片免费视频| 国产人妻精品一区二区三区| 真实处破女| 亚洲娇小被黑人巨大撑暴| 国产精品偷伦视频| 19禁大尺度无遮挡无码网站| 三浦惠理子AV人妻无码| 国产欧美日韩| 三级性生活片| 99超级碰碰成人香蕉网| 洗澡时老板进来揉我胸视频| 国产精品色情国产三级工口| 97国产一区二区三区四区五区| 亚洲色拍偷拍精二区三区在线观看| 三大高傲校花被调教成白| 边啃奶头边躁狠狠躁视频免费观看| 老色鬼精品无码一区二区| 乱老女人一二区视频| 淮滨县| 痛痛痛痛痛痛痛痛痛好快 | 揉我奶?啊?嗯高潮皇宫漫画| 欧美A级大胆AV视频人体走秀|