欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql排名的三種常見方式

 更新時(shí)間:2024年05月01日 09:20:05   作者:創(chuàng)作者mateo  
這篇文章主要介紹了mysql排名的三種常見方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

三種常見的排名

row_number、dense_rank、rank在MySQL 5.7中的實(shí)現(xiàn)

準(zhǔn)備數(shù)據(jù)

表結(jié)構(gòu)說明

成績表 SC(SId,CId,score)

  • SId 學(xué)?編號
  • CId 課程編號
  • score 分?jǐn)?shù)

創(chuàng)建SC表

create table SC(
    SId varchar(10),
    CId varchar(10),
    score decimal(18,1)
);

插入數(shù)據(jù)

-- 成績表 SC 
insert into SC values('01' , '01' , 80); 
insert into SC values('01' , '02' , 90); 
insert into SC values('01' , '03' , 99); 
insert into SC values('02' , '01' , 70); 
insert into SC values('02' , '02' , 60); 
insert into SC values('02' , '03' , 80); 
insert into SC values('03' , '01' , 80); 
insert into SC values('03' , '02' , 80); 
insert into SC values('03' , '03' , 80); 
insert into SC values('04' , '01' , 50); 
insert into SC values('04' , '02' , 30); 
insert into SC values('04' , '03' , 20); 
insert into SC values('05' , '01' , 76); 
insert into SC values('05' , '02' , 87); 
insert into SC values('06' , '01' , 31); 
insert into SC values('06' , '03' , 34); 
insert into SC values('07' , '02' , 89); 
insert into SC values('07' , '03' , 98);

對SC中的學(xué)生score進(jìn)行整體排名

ROW_NUMBER

1 2 3 4 5 6 7 沒有重復(fù)排名,依次遞增

SET @i := 0;
SET @p := 0;
SET @q := 0;
SELECT  t1.SId
        ,t1.CId
        ,t1.score
        ,@p := t1.score
        ,if(@p=@q,@i,@i := @i+1) as dense_rank
        ,@q :=@p
from (
    SELECT  SId
            ,CId
            ,score
    from SC
    order by score desc
) t1;

DENSE_RANK

1 2 3 3 3 4 5 6 7 有重復(fù)時(shí)并列排名,最終排名也是連續(xù)的

SET @i := 0;
SET @p := 0;
SET @q := 0;
SELECT  t1.SId
        ,t1.CId
        ,t1.score
        ,@p := t1.score
        ,if(@p=@q,@i,@i := @i+1) as dense_rank
        ,@q :=@p
from (
    SELECT  SId
            ,CId
            ,score
    from SC
    order by score desc
) t1;

RANK

1 2 3 3 3 6 7 8 有重復(fù)時(shí)并列排名,最終排名不連續(xù)

SET @i := 0;
SET @j := 0;
SET @p := 0;
SET @q := 0;
SELECT  t1.SId
        ,t1.CId
        ,t1.score
        ,@j := @j + 1
        ,@p := t1.score
        ,if(@p=@q,@i,@i := @j) as rank
        ,@q :=@p
from (
    SELECT  SId
            ,CId
            ,score
    from SC
    order by score desc
) t1;

進(jìn)行分組排名

ROW_NUMBER

查詢每?課程成績最好的前三名 1 2 3 4 5 6 7 沒有重復(fù)排名,依次遞增

SET @i := 0;
SET @p := 0;
SET @q := 0;
SELECT  tt1.SId
        ,tt2.SName
        ,tt1.CId
        ,tt1.score
        ,tt1.rn
from (
    select  t1.SId
            ,t1.CId
            ,t1.score
            ,@p := t1.CId
            ,if(@p=@q,@i := @i + 1,@i :=1) as rn
            ,@q := @p
    from (
        select  SId
                ,CId
                ,score
        from SC
        order by CId,score DESC
    ) t1
) tt1 join Student tt2 on tt1.rn<=3 and tt1.SId = tt2.SId
order by tt1.CId,tt1.rn;

DENSE_RANK

查詢每?課程成績最好的前三名 1 2 3 3 3 4 5 6 7 有重復(fù)時(shí)并列排名,最終排名也是連續(xù)的

SET @i := 0;
SET @p := 0;
SET @q := 0;
SET @j := 0;
SET @k := 0;
SELECT  tt1.SId
        ,tt2.SName
        ,tt1.CId
        ,tt1.score
        ,tt1.rn
from (
    select  t1.SId
            ,t1.CId
            ,t1.score
            ,@p := t1.CId
            ,@j := t1.score
            ,if(@p=@q,if(@j=@k,@i,@i := @i + 1),@i :=1) as rn
            ,@q := @p
            ,@k := @j
    from (
        select  SId
                ,CId
                ,score
        from SC
        order by CId,score DESC
    ) t1
) tt1 join Student tt2 on tt1.rn<=3 and tt1.SId = tt2.SId
order by tt1.CId,tt1.rn;

RANK

查詢每?課程成績最好的前三名 1 2 3 3 3 6 7 8 有重復(fù)時(shí)并列排名,最終排名不連續(xù)

SET @i := 0;
SET @p := 0;
SET @q := 0;
SET @j := 0;
SET @k := 0;
SET @m := 1;
SELECT  tt1.SId
        ,tt2.SName
        ,tt1.CId
        ,tt1.score
        ,tt1.rn
from (
    select  t1.SId
            ,t1.CId
            ,t1.score
            ,@p := t1.CId
            ,@j := t1.score
            ,if(@p=@q,@m := @m + 1,@m := 1)
            ,if(@p=@q,if(@j=@k,@i,@i := @m),@i :=1) as rn
            ,@q := @p
            ,@k := @j
    from (
        select  SId
                ,CId
                ,score
        from SC
        order by CId,score DESC
    ) t1
) tt1 join Student tt2 on tt1.rn<=3 and tt1.SId = tt2.SId
order by tt1.CId,tt1.rn;

總結(jié)

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

相關(guān)文章

  • linux下mysql5.7.19(tar.gz)安裝圖文教程

    linux下mysql5.7.19(tar.gz)安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了linux下mysql5.7.19tar.gz安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mysql8.0 用戶角色管理及授權(quán)的實(shí)現(xiàn)

    mysql8.0 用戶角色管理及授權(quán)的實(shí)現(xiàn)

    MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它提供了強(qiáng)大的安全機(jī)制來管理用戶權(quán)限,本文主要介紹了mysql8.0 用戶角色管理及授權(quán)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • MySQL?Prepared?Statement?預(yù)處理的操作方法

    MySQL?Prepared?Statement?預(yù)處理的操作方法

    預(yù)處理語句是一種在數(shù)據(jù)庫管理系統(tǒng)中使用的編程概念,用于執(zhí)行對數(shù)據(jù)庫進(jìn)行操作的?SQL?語句,這篇文章主要介紹了MySQL?Prepared?Statement?預(yù)處理?,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于mysql create routine 權(quán)限的一些說明

    關(guān)于mysql create routine 權(quán)限的一些說明

    下面小編就為大家?guī)硪黄P(guān)于mysql create routine 權(quán)限的一些說明。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • MySQL如何使用授權(quán)命令grant

    MySQL如何使用授權(quán)命令grant

    這篇文章主要介紹了MySQL如何使用授權(quán)命令grant,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • MySQL數(shù)據(jù)庫的約束限制詳解

    MySQL數(shù)據(jù)庫的約束限制詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的約束限制詳解,數(shù)據(jù)庫的約束是對表中數(shù)據(jù)進(jìn)行的一種限制,為了保證數(shù)據(jù)的正確性、有效性、完整性,下文簡單介紹需要的朋友可以參考一下
    2022-08-08
  • centos下mysql主從同步快速設(shè)置步驟分享

    centos下mysql主從同步快速設(shè)置步驟分享

    記錄一個(gè)比較簡便的mysql的主從同步設(shè)置步驟,方便日后使用。
    2012-06-06
  • CentOS 7下使用rpm包安裝mysql 5.7.18

    CentOS 7下使用rpm包安裝mysql 5.7.18

    這篇文章主要為大家詳細(xì)介紹了CentOS 7下使用rpm包安裝mysql 5.7.18的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mysql創(chuàng)建表分區(qū)的實(shí)現(xiàn)示例

    mysql創(chuàng)建表分區(qū)的實(shí)現(xiàn)示例

    表分區(qū)是指根據(jù)一定規(guī)則,將數(shù)據(jù)庫中的一張表分解成多個(gè)更小的,容易管理的部分,本文主要介紹了mysql創(chuàng)建表分區(qū)的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-01-01
  • MySQL中的鎖和MVCC機(jī)制解讀

    MySQL中的鎖和MVCC機(jī)制解讀

    MySQL事務(wù)、鎖和MVCC機(jī)制是確保數(shù)據(jù)庫操作原子性、一致性和隔離性的關(guān)鍵,事務(wù)必須遵循ACID原則,鎖的類型包括表級鎖、行級鎖和意向鎖,MVCC通過非鎖定讀和鎖定讀實(shí)現(xiàn)并發(fā)控制,幻讀和死鎖是并發(fā)事務(wù)中常見的問題,可以通過預(yù)防策略和優(yōu)化技巧解決
    2025-01-01

最新評論