文档章节

mysql排序后显示排序序号

o
 osc_ogi0qclx
发布于 2019/08/22 11:22
字数 732
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

网上找的一个比较齐全的解释案例,拿来记录一下

①   := 与 = 的区别

:=   赋值的意思。在set update select 中表示赋值的意思,用的比较少一般都用=,但是在用变量实现行号时(比如本文标题获取排列序号),一定要用:=。

 =   等于的意思,只有当set 和 update时,和:=的意思是一样的,表示赋值,其余情况都是等于的意思。

② 用户变量 @

@rank 是对一个叫rank的参数进行赋值。对用户变量赋值有两种方式,一种直接用"="另一种用":="。其区别在于使用set命令对用户变量赋值时,两种方式都可以使用;当使用select语句对用户变量进行赋值时,只能使用“:=”方式,因为在select语句中,“=”被看做是比较操作符。

1、根据某字段按序排列并获取排序号。(当访问量相同的时候,按正常顺序,继续排序)

SELECT a.*,@rank:=@rank + 1 AS rank_no
FROM (
        SELECT *
        FROM `logs`
        WHERE log_created> "2017-09-01"
        ORDER BY count DESC
     ) a, (SELECT @rank:= 0) b

SET @rank= 0;
SELECT a.log_id,a.log_created,a.count,@rank:=@rank + 1 AS rank_no
FROM (
        SELECT *
        FROM `logs`
        WHERE log_update > "2017-09-01"
        ORDER BY count DESC
    ) a;

结果展示:

踩坑:注意这里的a 和 b 的表别名,不取的话会报SQL异常哦

2、根据某字段按序排列获取排序号,且当该字段的值存在多个相同的记录时,则相同值排序号相同。

SET @rank = 0 ,@rowtotal := NULL;
SELECT
    a.log_id, a.log_created, a.count,
    CASE
WHEN @rowtotal = a.count THEN
    @rank
WHEN @rowtotal := a.count THEN
    @rank := @rank + 1
END AS rank_no
FROM
    (
        SELECT * 
        FROM `logs`
        WHERE log_update > "2017-09-01"
        ORDER BY count DESC
    ) a

踩坑:a.count,后面的,不可少

结果展示:

 

3、根据某字段按序排列获取排序号,且当该字段的值存在多个相同的记录时,则相同值的记录的排序号相同,并且下一组值的排序号为上一组内记录数+上一个排序号。

SET @rank = 0 ,@rowtotal := NULL ,@rowtotal1 = NULL ,@sart := 0;
SELECT a.log_id, a.log_created, a.count,
    CASE
        WHEN @rowtotal = a.count THEN @rank
        WHEN @rowtotal := a.count THEN @rank := @rank + 1 + @sart
    WHEN @rowtotal = 0 THEN @rank := @rank +1 +@sart
        END AS rank_no,
         CASE
        WHEN @rowtotal1 = a.count THEN @sart := @sart + 1
        WHEN @rowtotal1 := a.count THEN @sart := 0
    WHEN @rowtotal1 =0 THEN @sart := 0
        END AS sart
        FROM
        (
        SELECT *
        FROM `logs`
        WHERE log_update > "2017-09-01"
        ORDER BY count DESC
        ) a

 

 

上面的sql里又增加了一个参数sart,表示当前每次相同的个数,(同时还增加了rowtotal1,用于区别之前的roetotal,因为在这段sql中rowtotal在运行期间已被多次赋值,不适合做sart的比较参数)下一组记录,将在之前的排名上加上此参数就表示,下一组记录的排序编码。
结果展示:


————————————————
版权声明:本文为CSDN博主「crainnogao」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gao763024185/article/details/79638052

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
MySQL窗口函数

一、Mysql8.0 窗口函数 1、窗口函数与聚合函数的区别 MySQL从8.0开始支持窗口函数,窗口函数也叫分析函数。窗口函数更多的是业务中需要对数据做排序/分组排序,环比计算,百分比计算等需求。...

sansi_dba
03/16
0
0
MySQL查询获取行号rownum的解决办法

MySQL中可以使用变量产生行号,下面是2个简单例子: 使用工具:MySQL Workbench 说明:表heyf_10中字段,empid(员工工号)、deptid(部门编号)、salary(薪资); rownum是自定义变量,表示行号。...

如月王子
2014/09/19
918
0
操作MySQL数据进行记录的随意排序

说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢? 其实这里我所说的“随意排序...

osc_bf1dhmmd
2019/06/21
2
0
MySQL8.0窗口函数实践及小结

MySQL8.0之前,做数据排名统计等相当痛苦,因为没有像Oracle、SQL SERVER 、PostgreSQL等其他数据库那样的窗口函数。但随着MySQL8.0中新增了窗口函数之后,针对这类统计就再也不是事了,本文...

懂点IT的耿小厨
06/26
0
0
MySQL8.0窗口函数实践及小结

MySQL8.0之前,做数据排名统计等相当痛苦,因为没有像Oracle、SQL SERVER 、PostgreSQL等其他数据库那样的窗口函数。但随着MySQL8.0中新增了窗口函数之后,针对这类统计就再也不是事了,本文...

osc_wy8nhxhn
06/27
6
0

没有更多内容

加载失败,请刷新页面

加载更多

如果你失明了,你怎么编程? - How can you program if you're blind?

问题: Sight is one of the senses most programmers take for granted. 视觉是大多数程序员认为理所当然的感官之一。 Most programmers would spend hours looking at a computer monitor......

技术盛宴
16分钟前
10
0
如何删除使用Python的easy_install安装的软件包? - How do I remove packages installed with Python's easy_install?

问题: Python's easy_install makes installing new packages extremely convenient. Python的easy_install使安装新包非常方便。 However, as far as I can tell, it doesn't implement th......

fyin1314
46分钟前
8
0
如何将逗号分隔的字符串转换为数组? - How to convert a comma separated string to an array?

问题: I have a comma separated string that I want to convert into an array, so I can loop through it. 我有一个逗号分隔的字符串,我想将其转换成数组,因此可以循环遍历它。 Is the...

富含淀粉
今天
13
0
深源恒际:担心个人身份被冒用?不存在!

本文作者:c****t 近日,苟晶被冒名顶替身份参加高考的事件在社会各界掀起广泛热议。事件调查结果公布后,舆论风向逆转,吃瓜群众认为当事人夸大其词消费了公众情绪,一边对当事人所遭遇的不...

百度开发者中心
昨天
5
0
CKEditor 5 + SpringBoot实战(三):SpringData JPA数据持久化

在本系列的文章中,我将介绍如何在Spring Boot Application中使用CKEditor编辑器。介绍的内容包括基本环境的搭建,文件上传,SpringData JPA数据持久化,CKEditor5的安装,CKEditor图片上传,...

树下魅狐
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部