mysql 中关于获取行号@rownum:[email protected]+1

mysql中没有获取行号的函数,因此需要通过一些自定义语句来进行获取。通常做法是,通过定义用户变量@rownum来保存表中的数据。通过赋值语句@rownum:[email protected]+1来累加达到递增行号。

例如:select a.* ,@rownum:[email protected]+1 from a,(select @rownum:=0) r; 后半部分语句的select @rownum:=0 相当于创建了r的新表,其表的列为@rownum,数值为0.

通过利用变量将@rownum的行进行重新赋值,并显示。可以应用于获取行号或名次排列。

另外,在名次排列时,由于会有重复的数据,排列时仅仅按照,@rownum:[email protected]+1。排序是不对的,需要在数据相同时,名次应该相同。因此需要另一变量保存上次的数据,并进行与本行数据对比,相同 序号不变,不同序号应该等于行号。此时需要应用到case when进行判断,例如:

Select a.*,

Case

When @rownum0=a.c_id  then  @rownum:[email protected]+1

When @rownum0:=a.c_id  then  @rownum:=1

Else  @rownum

End rank1,

Case

When @rownum1=a.s_score then @rownum2

When @rownum1:=a.s_score then @rownum2:[email protected]

Else @rownum2

End rank2

 from (select * from score  order by c_id ,s_score desc

) as a,(select @rownum:=0, @rownum0:=0,@rownum1:=0,@rownum2:=0) r;

原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11061336.html

时间: 2024-11-06 17:51:31

mysql 中关于获取行号@rownum:[email protected]+1的相关文章

mysql获取行号

mysql获取行号,最简单的方式是使用全局变量 SELECT @rownum := @rownum + 1 AS id, cau.idcard FROM csf_user_auth cau, (select @rownum := 0) m WHERE cau.scene_id = 1 首先明白 “=” 和“:=” 的区别 在mysql中,“=”在select时候是“等于”的作用,不能做赋值使用,而“:="可以继续赋值 然后,在以上获取行号,每次查询把@rownum赋值为0,每一行都把@rownu

整列0,1,5的区别awk获取行号

阵列0 RAID 0至少需要两块以上的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上. 因为带宽加倍,所以读/写速度加倍, 但RAID 0在提高性能的同时,并没有提供数据保护功能,只要任何一块硬盘损坏就会丢失所有数据.因此RAID 0 不可应用于需要数据高可用性的关键领域. 阵列1一个两块硬盘所构成RAID磁盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据"镜像 RAID1通过硬盘数据镜像实现数据的冗余,保护数据安全,在两块盘上产生互为备份的数据,当原始数据繁忙时,可直接

Java如何取源文件中文件名和行号

package com.github.jdk; /**  * Java如何取源文件中文件名和行号  *   * {@code StackTraceElement}的定义详见文档  *   * @author doctor  *  * @time 2015年3月13日 上午9:16:16  */ public class StackTraceElementPractice { public static void main(String[] args) { StackTraceElement[] 

Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例

1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: 1 package cn.itcast_08; 2 3 import java.io.IOException; 4 import java.io.Reader; 5 6 /* 7 * 用Reader模拟BufferedReader的readLine()功能 8 * 9 * readLine():一次读取一行,根据换行符判断是否结束,只返回内容,不返回换行符

MySQL中查询获取每个班级成绩前三名的学生信息

今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT PRIMARY KEY,    c_name VARCHAR(50) ,    c_score INT,    c_class INT )DEFAULT CHARSET=utf8; INSERT INTO t_testscore VALUES (1, '张三6', 66, 1),(2, '张三5', 65,

mysql启动提示 access denied for user [email protected](using password:YES)

问题:遇到mysql启动提示 access denied for user [email protected](using password:YES) 1.检查密码有无错误,如果无就是权限问题. 2.打开SQL的图形工具,输入以下命令行 grant all privileges on *.* to 'root'@'localhost' identified by '你的密码' with grant option; flush privileges; 3.在本地环境运行没有问题,如有异常,请留下评

转Delphi中Memo显示行号列号

http://www.alonely.com.cn/Delphi/20160814/8912.html 实例说明本例是个光标应用的简单技巧,希望通过这个例子的学习后能举一反三.Delphi中像这样简单而又实用的例子还有很多,只要平时多注意积累就能写出简洁.执行效率高的代码.编程思路直接向Memo组件发送消息EM_LineFromChar并检测返回值,即可获知此组件中光标所在的行号,向Memo组件发送消息EM_LineIndex并检测返回值即可获知此组件中光标所在的列号 实例说明 本例是个光标应用

mysql中的多行查询结果合并成一个

SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17: 利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行,如|1 | 10,20,20| 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name)

mysql中的多行查询结果合并成一个(转)

SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17: 利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行,如|1 | 10,20,20| 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name)