国产探花免费观看_亚洲丰满少妇自慰呻吟_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 將返回此行所屬的組的編號。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 项城市| 兰西县| 五寨县| 宁陕县| 德州市| 浙江省| 桃江县| 那坡县| 和田市| 昌江| 繁峙县| 赞皇县| 黄陵县| 松潘县| 泰安市| 葫芦岛市| 乌拉特前旗| 淮安市| 达州市| 九江县| 溧水县| 当阳市| 梅河口市| 穆棱市| 皋兰县| 武清区| 彰武县| 绍兴县| 东丰县| 松原市| 泊头市| 禄丰县| 兴国县| 苗栗市| 都江堰市| 铁力市| 石楼县| 乌兰察布市| 合阳县| 类乌齐县| 新宁县|