Leetcode刷题 sql算法题 178 Rank Scores

来源:互联网 发布:人类为何不优化人种 编辑:程序博客网 时间:2024/06/01 10:37

主要参考

LeetCode解题报告

--解法一 笛卡尔连接 分组计数 排序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 belowSELECT 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;
as Rank就相当于是赋值给Rank,
自定义的变量是不断的变的,开始的时候那两个表的值是固定的0和null,
但是排序后开始按照顺序一行一行的输出,
每次输出as都是根据自定义的变量计算得出值,自定义的变量也不断更新


0 0
原创粉丝点击