成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

總結(jié)幾種MySQL中常見的排名問題

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

前言:

在某些應(yīng)用場景中,我們經(jīng)常會遇到一些排名的問題,比如按成績或年齡排名。排名也有多種排名方式,如直接排名、分組排名,排名有間隔或排名無間隔等等,這篇文章將總結(jié)幾種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。下面我們給出查詢語句及排名結(jié)果。

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

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

# 查詢語句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;# 排名結(jié)果+--------+-------+------+| 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)起來還是比較復(fù)雜的。好在MySQL8.0增加了窗口函數(shù),使用內(nèi)置函數(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);# 排名結(jié)果+--------+-------+-------+---------+---+| 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 |+--------+-------+-------+---------+---+

總結(jié):

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

以上就是總結(jié)幾種MySQL中常見的排名問題的詳細內(nèi)容,更多關(guān)于MySQL 排名的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲三级在线免费| 91国产成人在线| 欧美特级限制片免费在线观看| 一区二区三国产精华液| 99久久精品99国产精品| 精品福利一二区| 成人性视频免费网站| 91精品国产色综合久久不卡电影| 久久99精品久久久久久动态图| 日本道色综合久久| 美女爽到高潮91| 欧美日韩国产综合一区二区三区 | 国产风韵犹存在线视精品| 精品视频在线看| 狠狠狠色丁香婷婷综合激情| 欧美视频自拍偷拍| 国产乱人伦偷精品视频不卡| 欧美一区二区在线免费观看| 国产精品一线二线三线| 91精品欧美久久久久久动漫 | 日本国产一区二区| 婷婷开心激情综合| 国产欧美成人| 日本网站在线观看一区二区三区| 欧美色中文字幕| 韩国av一区二区三区在线观看| 5858s免费视频成人| 丁香桃色午夜亚洲一区二区三区| 精品久久五月天| 波波电影院一区二区三区| 精品久久99ma| 欧美日本精品| 《视频一区视频二区| 国产亚洲在线观看| 视频一区二区三区入口| 欧美三区免费完整视频在线观看| 国产一区二区三区视频在线播放| 日韩久久久久久| 欧美日本精品| 夜夜嗨av一区二区三区网页| 久久综合影视| 国产成人在线看| 久久精品无码一区二区三区 | 欧美人牲a欧美精品| 国产不卡视频一区| 国产欧美日韩精品一区| 亚洲欧洲日韩综合二区| 日韩高清不卡在线| 欧美一二区视频| 欧美精品亚洲| 亚洲欧美激情插| 91国产精品成人| 成人毛片视频在线观看| 国产精品麻豆久久久| 国产一区二区久久久| 老色鬼精品视频在线观看播放| 91精品福利在线一区二区三区| 99视频精品全部免费在线| 国产精品色哟哟网站| 亚洲一区久久| 国产激情偷乱视频一区二区三区| 国产香蕉久久精品综合网| 亚洲看片一区| 蜜桃视频在线观看一区| 亚洲精品一区二区三区四区高清 | 91美女片黄在线观看| 国产精品色哟哟网站| 午夜影院日韩| 国产精品一区二区久久不卡 | 国产成人午夜99999| 国产精品无人区| 久久国产精品久久精品国产| 国产成人免费视频| 亚洲精品欧美综合四区| 欧美猛男男办公室激情| 欧美日本韩国一区二区三区| 天天av天天翘天天综合网| 欧美成人video| 一本色道久久综合亚洲精品不卡| 精品亚洲porn| 国产精品福利影院| 欧美日韩中文一区| 欧美特黄视频| 狠狠色综合色综合网络| 国产精品福利一区| 欧美日韩成人一区| 亚洲人妖在线| 国产不卡高清在线观看视频| 亚洲美女屁股眼交3| 日韩午夜在线影院| 亚洲欧美精品在线观看| 成人av网在线| 午夜激情一区二区| 国产亚洲短视频| 欧美调教femdomvk| 韩日精品视频| 国模一区二区三区白浆| 国产精品高潮久久久久无| 91精品国产综合久久久蜜臀图片| 亚洲日韩视频| 福利电影一区二区三区| 亚洲国产aⅴ天堂久久| 久久日一线二线三线suv| 色哟哟精品一区| 欧美成人日本| 精品一区免费av| 亚洲日本一区二区| 精品国产伦一区二区三区观看方式 | 制服丝袜av成人在线看| 亚洲欧洲综合| 成人一级黄色片| 午夜欧美在线一二页| 国产亚洲福利社区一区| 欧美日韩一区二区三区视频 | 欧美精品一区二区在线观看| 久久精品首页| 亚洲欧美影院| 国产美女娇喘av呻吟久久| 亚洲永久精品国产| 中文字幕高清一区| 日韩欧美成人一区| 欧美亚洲一区二区在线| 国产欧美精品| 欧美日本国产精品| 国产盗摄精品一区二区三区在线 | 中文字幕在线不卡国产视频| 日韩一卡二卡三卡国产欧美| 中文字幕一区二区三区乱码在线| 777午夜精品视频在线播放| 可以看av的网站久久看| 亚洲黄色精品| 91在线小视频| 成人在线综合网站| 极品少妇一区二区| 日韩国产一二三区| 亚洲高清不卡在线观看| 亚洲视频你懂的| 久久精品视频在线看| 欧美一区二区大片| 欧美视频一区二区在线观看| 亚洲一区二区免费看| 国产一区二区三区四区hd| 成人动漫在线一区| 精品亚洲国内自在自线福利| 午夜精品福利在线| 亚洲一区在线观看免费| 亚洲日韩欧美一区二区在线| 国产午夜精品一区二区| 精品免费一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 一区二区三区日韩在线观看| 国产精品久久毛片| 国产欧美日韩精品一区| 精品福利一二区| 日韩视频免费直播| 欧美日韩一区视频| 欧美怡红院视频| 色婷婷av久久久久久久| 久久亚洲免费| 久久综合激情| 裸体丰满少妇做受久久99精品 | 91成人看片片| 一本久久a久久精品亚洲| 欧美资源在线| 久久午夜电影| 久久亚洲美女| 久久久久综合一区二区三区| 国产精品伊人日日| 国产欧美另类| 国产女优一区| 久久成人资源| 一本一道久久a久久精品综合蜜臀| 欧美亚洲色图校园春色| 久久国产日韩欧美| 色哟哟亚洲精品| 在线观看日产精品| 欧美色图12p| 欧美裸体一区二区三区| 欧美精品一二三| 91啪亚洲精品| 欧美午夜欧美| 一本色道久久综合亚洲精品高清 | 在线视频精品一区| 国产亚洲在线| 午夜在线视频观看日韩17c| 国产一区导航| 亚洲乱码国产乱码精品精的特点| 国产精品欧美久久| www.日本不卡| 蜜桃精品在线观看| 欧美国产成人精品| 欧美老人xxxx18| 国产三级精品在线不卡| 久久国产精品72免费观看| 中文字幕在线不卡一区| 欧美日韩国产综合一区二区| 精品成人在线| 欧美一级日韩免费不卡| 精品国产伦一区二区三区免费 | 国产99精品视频|