日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:289日期:2023-10-12 08:09:16

前言:

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

創建測試表

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);# 查看下插入的數據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.普通排名

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

# 查詢語句SELECT xuehao, score, @curRank := @curRank + 1 AS rankFROM scores_tb, (SELECT @curRank := 0) rORDER 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,查得一行將此變量加一,并以此作為排名。我們看到這類排名是沒間隔的并且有些分數相同但排名不同。

2.分數相同,名次相同,排名無間隔

# 查詢語句SELECT xuehao, score, CASEWHEN @prevRank = score THEN @curRankWHEN @prevRank := score THEN @curRank := @curRank + 1END AS rankFROM scores_tb, (SELECT @curRank :=0, @prevRank := NULL) rORDER 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.并列排名,排名有間隔

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

# 查詢語句SELECT xuehao, score, rank FROM(SELECT xuehao, score,@curRank := IF(@prevRank = score, @curRank, @incRank) AS rank, @incRank := @incRank + 1, @prevRank := scoreFROM scores_tb, (SELECT @curRank :=0, @prevRank := NULL, @incRank := 1) rORDER 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 |+--------+-------+------+

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

MySQL8.0 利用窗口函數實現排名

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

# 三條語句對于上面三種排名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 |+--------+-------+-------+---------+---+

總結:

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

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

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩电影在线视频| 久久中文欧美| 国产精品一区二区美女视频免费看 | 欧美日韩尤物久久| 亚洲综合婷婷| 99亚洲视频| 日韩中文字幕麻豆| 免费看精品久久片| 日韩欧美中文字幕一区二区三区| 久久久久午夜电影| 欧美精品日日操| 日韩视频在线一区二区三区| 成人免费网站www网站高清| 亚洲日本免费电影| 久久国产小视频| 国产极品模特精品一二| 婷婷成人基地| 精品久久一区| 国产综合色区在线观看| 亚洲免费网址| 国产精品99一区二区| 久久丁香四色| 99久久夜色精品国产亚洲狼| 青青国产精品| 日韩毛片视频| 欧美在线看片| 九九久久电影| 久久成人高清| 日韩中文欧美在线| 日韩不卡视频在线观看| 久久国产乱子精品免费女| 999国产精品视频| 日本不卡一区二区三区| 老牛影视精品| 亚洲日本三级| 久久久成人网| 久久亚洲人体| 国产一区亚洲| 亚洲在线网站| 国产精品毛片| 国产香蕉精品| 亚洲午夜黄色| 日本欧美韩国一区三区| 久久中文字幕一区二区三区| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 麻豆精品av| 亚洲香蕉网站| 欧美日韩亚洲一区二区三区在线| 美女久久久久久| 亚洲精品一二三区区别| 亚洲毛片在线免费| 国产成人精品三级高清久久91| 亚洲第一精品影视| 欧美日韩一区自拍| 97视频热人人精品免费| 五月天久久久| 欧美在线首页| 伊人精品视频| 日韩成人精品一区二区| 亚洲精品自拍| 另类av一区二区| 精品美女在线视频| 亚洲免费一区三区| 欧美肉体xxxx裸体137大胆| 国产精选久久| 日韩高清在线观看一区二区| 亚洲韩日在线| 四虎国产精品免费观看| 日韩高清不卡一区| 久久久夜精品| 精品免费av在线| 久久精品 人人爱| 国产免费久久| 免费在线播放第一区高清av| 91精品国产自产精品男人的天堂| 亚州av日韩av| 日本大胆欧美人术艺术动态| 91久久中文| 日韩制服丝袜av| 日本一区中文字幕| 国产精品日本一区二区不卡视频 | 欧美视频精品全部免费观看| 日韩毛片网站| 青青草国产精品亚洲专区无| 日本电影久久久| 欧美成人aaa| 在线日韩电影| 日本99精品| 日本久久精品| 免费人成在线不卡| 免费视频一区二区三区在线观看 | 国产调教一区二区三区| 国产中文欧美日韩在线 | 91精品啪在线观看国产18| 久久久夜精品| 综合国产精品| 国产资源在线观看入口av| 亚洲一区区二区| 国产九一精品| 亚洲不卡av不卡一区二区| 久久亚洲人体| 欧美天堂在线| 日韩激情av在线| 成人污污视频| 高清不卡一区| 亚洲一区国产一区| 青青在线精品| 欧美日韩国产在线观看网站| 热久久免费视频| 久久精品色播| 精品三级av| 97久久亚洲| 中文字幕一区二区三区四区久久| 日韩国产在线| 99成人超碰| 亚洲一区日本| 久久精品99国产精品| 久久精品999| 红杏一区二区三区| 午夜av不卡| 久久久国产亚洲精品| 欧美一区三区| 欧美在线91| 牛牛精品成人免费视频| 亚洲精品.com| 在线精品一区| 蜜臀精品一区二区三区在线观看| 日韩激情啪啪| 亚洲欧美一区在线| 久热re这里精品视频在线6| 首页国产欧美久久| 国产日韩欧美在线播放不卡| 免费日韩av| 亚洲网站视频| 成人国产综合| 久久一区精品| 日韩欧美在线精品| 先锋亚洲精品| 久久久久国产一区二区| 久久一区精品| 国产精品日韩精品在线播放| 亚洲另类黄色| 日韩中文字幕| 日本精品久久| 国产亚洲欧美日韩精品一区二区三区 | 久久精品一区二区国产| 一区二区视频欧美| 999久久久国产精品| 精品国产一级| 欧美国产极品| 青草av.久久免费一区| 日韩精品亚洲专区| 日韩综合一区二区三区| 99国产成+人+综合+亚洲欧美| 成人自拍av| 欧美亚洲在线日韩| 日韩不卡免费高清视频| 欧美日韩一区二区综合| 国产精品亚洲一区二区三区在线观看| 国产精品任我爽爆在线播放| 国产精品免费99久久久| 激情自拍一区| 国产模特精品视频久久久久| 亚洲精品小说| 日韩专区欧美专区| 日韩国产在线一| 国产精品男女| 久久香蕉网站| 成人在线视频中文字幕| 国产亚洲欧美日韩精品一区二区三区| 欧美日韩1区2区3区| 国产精品伦理久久久久久| 91看片一区| 综合一区av| 一区二区三区四区日本视频| 欧美日韩视频一区二区三区| 99pao成人国产永久免费视频 | 青青久久av| 国产黄大片在线观看| 亚洲特级毛片| 欧美亚洲免费| 最近高清中文在线字幕在线观看1| 日韩久久电影| 丝袜美腿成人在线| 精品资源在线| 天堂成人国产精品一区| 精品五月天堂| 日韩一级网站| 精品国产欧美| 日韩亚洲精品在线观看| 久久国产影院| 日韩av网站在线观看| 蜜桃一区二区三区| 国产精品777777在线播放| 国产精品99一区二区| 久久精品超碰| 男女激情视频一区| 波多野结衣久久精品| 欧美国产极品| 欧美在线首页|