近期在写mysql数据库报表时,需要给查询排序后的数据增加一列序号,用来统计查询数据的排名,在这里遇到一个视图和排序冲突的问题。

Part 1

oracle数据库中可以直接给查询语句增加一列ROWNUM, ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号,它总是从1开始排起。

比如sql如下

select rownum,t.* from table t;

但是以上sql如果不增加排序,这个数据没有问题,一旦增加排序,序列号就会错乱。

select rownum,t.* from table t order by t.stamp

▷ 第一种解决办法:增加一个子查询

select  rownum,a.*  from (select t.* from table t order by t.stamp)  a

▷ 第二种解决办法:使用row_number()函数

select row_number() over (order by t.stamp) rn,t.*  from table t

原理:会先对stamp进行排序,排序完后,再给每条数据进行编号。

row_number() over()函数是一个强大的分组排序函数,在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、  order by 的执行。

Part 2

但在使用mysql数据库时,这些函数和办法都无法使用,mysql数据库给查询增加一个序列就需要用到参数,最简单的办法如以下sql:

SELECT @rownum:=@rownum+1 AS 序号, t.* FROM  table t,(SELECT @rownum:=0) r

设定一个参数为0,使每行增加1,作为第一列的序列号。

还可以使用以下几种写法

① select (@rowNO := @rowNo+1) AS rowno,a.* from (SELECT * FROM t_user) a,(select @rowNO :=0) b ;

②set @rn=0; select @rn:=@rn+1 as rn, m.* from (select * from t_user  )m; -- 连续执行两个语句

③ select (@rowNO := @rowNo+1) AS 序号,a.* from  t_user a,(select @rowNO :=0) b

注意:@rownum的写法不唯一,但一定有@,等于号写法一定是:=(冒号等于)

这种方式的查询存在的问题是语句中存在参数和子查询,在需要建立视图时会出现报错,mysql不允许视图语句中有参数和子查询语句。会出现报错:

1351 - View's SELECT contains a variable or parameter

在需要排序增加排名并建立查询视图的情况下,可以使用以下这种办法:

SELECT (SELECT COUNT(*)+1 FROM table  b WHERE b.排序字段 > a.排序字段) AS row_num, a.* FROM  table  AS a;

上面的sql语句可以达到在mysql数据库中建立视图的要求,但由于是通过比对字段大小来达成目的,如果排序字段这一列列数据中存在相同的值则会出现两个排名相同的行。

查询 oracle_关于oracle和mysql数据库的查询问题相关推荐

  1. mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

    Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组 ...

  2. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询

    /**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...

  3. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)

    Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...

  4. ezdml 支付mysql 吗_EZDML数据库表结构设计器_设计sql、oracle、mysql数据库表结构 V2.39 免费版...

    很多程序员或者网站站长在设计网站数据库的时候都要进行表结构设计,如果您不想操作原始的数据库工具之想简单设计一下数据库表结构,那么你不妨试试这款EZDML数据库表结构设计器,可以快速设计sql.orac ...

  5. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  6. php 查看mysql连接数据库_php基础之连接mysql数据库和查询数据

    php基础之连接mysql数据库和查询数据 文章主要介绍了php连接mysql数据库和查询数据的方法和示例,需要的朋友可以参考下,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕 ...

  7. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

    [环境介绍] 云数据库MySQL 5.7 [背景描述] 业务需要:需要对16370077的表数据进行更新部分数据操作 UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = ...

  8. Mybatis代码生成适配Oracle和Mysql数据库_01

    文章目录 1. 依赖 2. generatorConfig.xml 开源项目地址: https://gitee.com/gb_90/Oracle_Mysql_Generate Git克隆方式: git ...

  9. mysql 数据库里查询语句中不等于的两种写法

    mysql 数据库里查询语句中不等于的两种写法 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 1.my ...

最新文章

  1. 使用高级视频质量工具 AVQT 评估视频 | WWDC 演讲实录
  2. go micro java_Java Micro Framework:您无法忽略的新趋势
  3. Get_HD_Serial() 获得磁盘驱动器序列号
  4. 实战HTML:根据参数构造动态设备监测列表
  5. 21天java基础入门总结
  6. 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。...
  7. 基本磁盘转换为动态磁盘后快速启动关机变重启,记录一次研究过程
  8. 遗传+粒子群 求解多配送中心车辆调度问题(python)
  9. 华为模拟器eNSP直连路由静态路由配置实验
  10. 免费手机号码归属地API查询接口
  11. 超级联盟战队,等待你的加入
  12. 泪目!曾风靡全国的国产网游,宣布停运!
  13. xlsx 导出 多级表头数据
  14. Golden Software Surfer 18中文版
  15. 衡量计算机网络性能的指标
  16. 科学之美:影响人类文明的方程式
  17. 未登陆词/停用词建立和使用
  18. 第五周作业——用状态转换图描绘复印机的行为
  19. python:mysql创建数据库
  20. dotnet 用 gcdump 调试应用程序内存占用

热门文章

  1. 目标检测,目标识别的SAR数据集构建和标注
  2. [云炬创业基础笔记]第六章商业模式测试14
  3. [云炬创业基础笔记]创业计划书常见问题
  4. [云炬创业基础笔记] 第四章测试8
  5. 科大星云诗社动态20211108
  6. MatConvnet工具箱文档翻译理解(4)
  7. 重温c语言之环境变量
  8. bcb中使用pas文件
  9. C#与Javascript变量、函数之间的相互调用2008年11月28日 星期五 05:28 P.M.1.如何在JavaScript访问C#函数?
  10. 23种设计模式C++源码与UML实现--工厂模式