Leetcode刷題 sql演算法題 178 Rank Scores
阿新 • • 發佈:2019-01-02
主要參考
as Rank就相當於是賦值給Rank,--解法一 笛卡爾連線 分組計數 排序 SELECT Scores.Score, COUNT(Ranking.Score) AS RANK FROM Scores , ( SELECT DISTINCT Score FROM Scores ) Ranking --等於是分組計數 每個分組中方的都是比自己大或相等的所有distinct元素 WHERE Scores.Score <= Ranking.Score --分組 GROUP BY Scores.Id, Scores.Score --組id排序 降序 ORDER BY Scores.Score DESC; --解法二 mysql自定義變數 -- Write your MySQL query statement below SELECT Score, Rank FROM( SELECT Score, --每一次都每一行都進行判斷和計算 --2 當值為Score,返回0, 否則返回1 也就是不重複的自增 重複的不變 @curRank := @curRank + IF(@prevScore = Score, 0, 1) AS Rank, @prevScore := Score --1 初始變數值設定為0 FROM Scores s, (SELECT @curRank := 0) r, (SELECT @prevScore := NULL) p --3 降序排列 ORDER BY Score DESC ) t;
自定義的變數是不斷的變的,開始的時候那兩個表的值是固定的0和null,
但是排序後開始按照順序一行一行的輸出,
每次輸出as都是根據自定義的變數計算得出值,自定義的變數也不斷更新