美文网首页
SQL进阶01:rank排名函数

SQL进阶01:rank排名函数

作者: 数据蝉 | 来源:发表于2019-10-25 23:32 被阅读0次

前言

mysql免费开源,相信做数据的同学基本都会接触到此数据库。那给一些数据进行排名,是我们在数据处理过程中很常见的事情,但是mysql没有直接的rank排名函数,如何解决这个问题呢。那今天就给大家讲解下如何在mysql里如何实现在排名 :

案例示范:

1. 建表并插入数据:
 CREATE TABLE `cats` (
      `cid` int(50) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `length` int(10) NOT NULL,
      PRIMARY KEY (`cid`),
      UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

INSERT INTO `cats` (`cid`, `name`, `length`) VALUES
(1, 'A', 18),
(2, 'B', 17),
(3, 'C', 23),
(4, 'D', 21),
(5, 'E', 20),
(6, 'F', 27),
(7, 'G', 15),
(8, 'H', 19),
(9, 'I', 26),
(10, 'J', 19),
(11, 'K', 20),
(12, 'L', 22),
(13, 'M', 17),
(14, 'N', 18),
(15, 'O', 23);
image.png
2.实现rank一般排名

实现增加排名字段的列、并按照legth升序,初始化定义变量@curRank := 0:

        SELECT cid, name, length, @curRank := @curRank + 1 AS rank
        FROM cats p, (
        SELECT @curRank := 0
        ) q
        ORDER BY length

或者使用set声明变量:

SET @curRank := 0;
SELECT cid, name, length, @curRank := @curRank + 1 AS rank
FROM cats
ORDER BY length
image.png
3、实现以多字段排名

先以length降序、再以name排列,与上面类似,加一个字段排序就好了。

    SELECT cid, name, length, @curRank := @curRank + 1 AS rank
    FROM cats p, (
    SELECT @curRank := 0
    ) q
    ORDER BY length DESC, name
image.png
4、实现并列排名(第一种情况)

相同length值排名一样;且下一个大的length值的排名加1,如下:

SELECT cid, name, length, 
CASE 
WHEN @prevRank = length THEN @curRank 
WHEN @prevRank := length THEN @curRank := @curRank + 1
END AS rank
FROM cats p, 
(SELECT @curRank :=0, @prevRank := NULL) r
ORDER BY length
image.png
5、实现并列排名(第二种情况)

相同length值排名一样;且下一个大的length值的排名按照所处的行数,进行排序,也就是它在多少行,排名就是多少,如下:

 SELECT cid, name, length, rank FROM
(SELECT cid, name, length,
@curRank := IF(@prevRank = length, @curRank, @incRank) AS rank, 
@incRank := @incRank + 1, 
@prevRank := length
FROM cats p, (
SELECT @curRank :=0, @prevRank := NULL, @incRank := 1
) r 
ORDER BY length) s
image.png

好了,是不是很好的解决了我们的排名问题了呢,赶快试试吧~~

相关文章

  • SQL进阶01:rank排名函数

    前言 mysql免费开源,相信做数据的同学基本都会接触到此数据库。那给一些数据进行排名,是我们在数据处理过程中很常...

  • rank函数使用注意事项

    在计算排名时,我们经常会用到rank()函数,rank()函数使用很简单:rank(排名数值,排名计算的列,排序顺...

  • SQL窗口函数

    SQL窗口函数 partition by order by rank, dense_rank, row_numbe...

  • excel学习第4天

    排名函数 rank美式排名 sum+countif中式排名 vlookup 1.函数意义:查找条件对应的值。 2....

  • 29、其他函数RANK、ROUND、INT2018-10-19

    一、RANK函数(用于排名) 1、基本用法 =rank(排名的数字,引用区域,0(0是降序,非0是升)) 2、不出...

  • MySQL查询笔记

    1.关于mysql实现排名mysql不能用rank()函数,比如: 执行报错,无法直接用rank()函数 但可以用...

  • SQL——高级聚集

    1.排名rank/dense_rank示例: 对于上述问题,可以使用dense_rank聚集函数解决: 而如果是要...

  • sql排名函数rank()、row_number()、dense

    -- rank()排名是不连续的,出现同名的排序序号会相同(比较常规的排序),且序号会断开 -- row_numb...

  • Excel 条件格式

    (一)这是一个普通的排名表,D列是用Rank函数计算出的当期排名。 =RANK(B2,B:B) 如果添加排名升降列...

  • LeetCode数据库—分数排名

    SQL架构: 查看完整表记录 编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相...

网友评论

      本文标题:SQL进阶01:rank排名函数

      本文链接:https://www.haomeiwen.com/subject/hhzevctx.html