国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

MySQL中如何讓相同的成績得到相同的排名

2019-11-08 20:48:32
字體:
來源:轉載
供稿:網友
-- 由于MySQL中不存在類似于SQL Server或Orcal中的rank()函數來得到排名,而在實際工作中,mysql是我們常選用的存儲過程,有時候針對排名,一般的排序不符合項目需求,我們往往需要的是相同的成績需要相同的排名,并且相同的排名不能占位,所以我總結了以下的方法:-- 測試表CREATE TABLE paiming (name VARCHAR(4),score INT);-- 測試數據insert into paiming VALUES('name1',129),('name2',137),('name3',137),('name4',126),('name5',126),('name6',126),('name7',124),('name8',123),('name9',120),('name10',120),('name11',99),('name12',99);-- 第一種方法,排名占位但不連續-- @rank表示最終排名-- @rownum表示順序排名-- @PRe_score表示上一個排序值SELECT @rownum:=@rownum+1 AS rownum, IF(@pre_score=ff.score,@rank,@rank:=@rownum)as rank, @pre_score:=ff.score, ff.* FROM (SELECT score FROM paiming ORDER BY score DESC) ff, (SELECT @rank:=0,@rownum:=0,@pre_score:=null) tt;-- 第二種,排名不占位但連續-- @rowtotal 用于記錄上一條數據的分數SELECT    ff.score,    CASEWHEN @rowtotal = ff.score THEN @rownum-- 當前數據分數跟上一條數據的分數比較,相同分數的排名就不變WHEN @rowtotal := ff.score THEN @rownum :=@rownum + 1-- 不相同分數的排名就加一WHEN @rowtotal = 0 THEN @rownum :=@rownum + 1END AS rownumFROM    (        SELECT            score        FROM           paiming        ORDER BY            score DESC    ) AS ff,

    (SELECT @rownum := 0 ,@rowtotal := NULL) r

-- 看看SQL SERVER和Oracle四個排名函數的區別:

RANK()返回結果集的分區內每行的排名。行的排名是相關行之前的排名數加一。如果兩個或多個行與一個排名關聯,則每個關聯行將得到相同的排名。 DENSE_RANK()返回結果集分區中行的排名,在排名中沒有任何間斷。行的排名等于所討論行之前的所有排名數加一。如果有兩個或多個行受同一個分區中排名的約束,則每個約束行將接收相同的排名。 ROW_NUMBER()返回結果集分區內行的序列號,每個分區的第一行從開始。ORDER BY子句可確定在特定分區中為行分配唯一ROW_NUMBER的順序。 NTILE()將有序分區中的行分發到指定數目的組中。各個組有編號,編號從一開始。對于每一個行,NTILE 將返回此行所屬的組的編號。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 信宜市| 罗田县| 远安县| 兰州市| 岐山县| 客服| 无极县| 公主岭市| 海城市| 定日县| 大城县| 乐陵市| 秭归县| 昌乐县| 十堰市| 汝州市| 星子县| 井陉县| 孝义市| 兴业县| 永平县| 彭泽县| 连平县| 右玉县| 项城市| 靖州| 法库县| 伊春市| 惠安县| 成武县| 桃源县| 汝州市| 基隆市| 防城港市| 招远市| 察哈| 齐齐哈尔市| 抚宁县| 襄垣县| 威信县| 定陶县|