1、行号问题行号是指按顺序为查询结果集的行分配的连续整数。Mysql数据库在行号方面的支持并不是十分友好,没有橡其他数据库一样提供类似的row_number解决方案,因此得到行号是一个十分有技巧的问题。

2.1 不重复数据分析问题先看以下实例数据,创建sales表:

CREATE TABLE sales

(

empid VARCHAR(10) NOT NULL,

mgrid VARCHAR(10) NOT NULL,

qty INT NOT NULL,

PRIMARY KEY (empid)

);

插入实例数据:

INSERT INTO sales VALUES('A','Z',300);

INSERT INTO sales VALUES('B','X',100);

INSERT INTO sales VALUES('C','X',200);

INSERT INTO sales VALUES('D','Y',200);

INSERT INTO sales VALUES('E','Z',250);

INSERT INTO sales VALUES('F','Z',300);

INSERT INTO sales VALUES('G','X',100);

INSERT INTO sales VALUES('H','Y',150);

INSERT INTO sales VALUES('I','X',250);

INSERT INTO sales VALUES('J','Z',100);

INSERT INTO sales VALUES('K','Y',200);

查看sales数据:

select * from sales;

分析问题是我们如何使用SQL语句将empid输出一个行号出来?从1开始?sales表empid是主键不会存在重复的数据,如果不是主键存在重复的数据怎么写SQL:

我是这么分析的过程:

A = A 结果为 true 计数器加1

A < B 结果为 true 计数器加1 结果为2

B < C 结果为 true 计数器加1 结果为3

C < D 结果为 trne 计数器加1 结果为4

依次类推;empid字段自已跟自已关联,如果条件满足小于或等于时,计数据加1,写成以下SQL,

在SQL语句中,称为子查询。

SELECT

empid,

(

SELECT COUNT(*) FROM sales AS t2

WHERE t2.empid <= t1.empid

) AS rownum

FROM sales t1;

上面的语句功能还有一个性能上的问题,经过测试改为以下:

SELECT empid,

(SELECT COUNT(*)

FROM sales AS t2

WHERE t2.qty < t1.qty OR (t2.qty = t1.qty AND t2.empid <= t1.empid)

) AS rownum

FROM

sales AS t1

ORDER BY qty,empid;

2.2 重复数据分析问题

先看以下实例数据,创建数字辅助表nums

CREATE TABLE nums

(

a INT

);

INSERT INTO nums VALUES(1);

INSERT INTO nums VALUES(2);

INSERT INTO nums VALUES(3);

INSERT INTO nums VALUES(4);

INSERT INTO nums VALUES(5);

INSERT INTO nums VALUES(6);

INSERT INTO nums VALUES(7);

INSERT INTO nums VALUES(8);

INSERT INTO nums VALUES(9);

INSERT INTO nums VALUES(10);

select * from nums;

创建重复数据表t;

CREATE TABLE t (a CHAR(1));

INSERT INTO t SELECT 'X';

INSERT INTO t SELECT 'X';

INSERT INTO t SELECT 'X';

INSERT INTO t SELECT 'Y';

INSERT INTO t SELECT 'Y';

INSERT INTO t SELECT 'Z';

select * from t;

看一下t表的数据,X有3条记录,Y有2条记录,Z有1条记录,这个场景下如何解决行号问题?经过分析以后:

SELECT nums.a + smaller AS rownum,

C.a FROM

(

SELECT a,COUNT(*) AS cnt,

( SELECT COUNT(*) FROM t AS B

WHERE B.a < A.a) AS smaller

FROM t AS A

GROUP BY a

)AS C,nums

WHERE nums.a <= cnt;

3、总结问题:

行号的数据问题,其实在mysql开发实践中经常会遇到,我们做俩步分析问题,不重数的数据我们采用子查询自连求数,如果是重复的数据,我们采用数据辅助表和子查询自连求之。

mysql 行号_mysql的行号问题相关推荐

  1. mysql 分组行号_mysql 显示行号,以及分组排序

    建表: CREATE TABLE `my_tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_code` varchar(255) DEFAULT ...

  2. mysql如何使用命令行操作_MySQL命令行基本操作

    本文记录的是windows7系统下Mysql的命令行基本操作. 一.MySQL启动与登录 1. MySQL启动: 通过运行mysql安装目录下的/bin/mysqld.exe文件来启动Mysql服务. ...

  3. mysql排序行号_mysql 取得行号后再排序

    一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tre ...

  4. mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作

    使用环境 在cmd模式下输入 mysql --version (查看mysql安装的版本). 完整的命令可以通过mysql --help来获取. 本测试使用的Mysql版本是mysql5, 本测试使用 ...

  5. mysql命令行语句_MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  6. mysql命令参数_MySQL命令行参数完整版

    MySQL命令行参数完整版 mysql教程支持下面的选项: ---help,-? 显示帮助消息并退出. --batch,-B 打印结果,使用tab作为列间隔符,每个行占用新的一行.使用该选项,则mys ...

  7. mysql命令技巧_Mysql命令行技巧汇总

    29月/13 1) pager pager真是一个很神奇的东西,它可以控制mysql的输出.默认值是stdout,直接输出. 艾,貌似讲不清楚啊,还是看几个例子吧: mysql> SELECT ...

  8. mysql 用户命令_MySQL命令行新建用户

    https://www.cnblogs.com/penciler/p/4813157.html MySQL命令行能否实现新建用户呢?答案无疑是肯定的.而且在使用使用MySQL命令行新建用户后,还可以为 ...

  9. mysql批量添加卡号_mysql数据库卡号卡密批量生成写入验证附易辅助模块

    SQL = "select * from dianka where kahao='" + 编辑框2.内容 + "' and mima='" + 编辑框3.内容 ...

最新文章

  1. [Issue Fixed]-repo-error: .repo/manifests/: contains uncommitted changes
  2. 硕博士的朋友圈都有哪些特点?
  3. JavaFX技巧13:学习Modena CSS文件
  4. day30,网络编程和各种协议
  5. 常见的网站布局方式---左固定右自适应、左右固定中自适应等
  6. php验证码完整功能,用PHP实现验证码功能
  7. [转]Linq查询DataTable,DataRow
  8. Julia: array =tuple, 与 ...
  9. Perl语言及安装运行环境
  10. 《通用规范汉字表》背景知识词条
  11. 2020 IDEA插件无法安装问题
  12. 做到这五点,才算是好用户体验 -- 转自周鸿祎在UPA用户体验大会上的演讲
  13. python 求复数的模
  14. rc时间常数定义_rc电路时间常数的定义及计算
  15. 二叉树 | 二叉树的镜像(翻转)
  16. 【嵌入式蓝桥杯】解决LED和LCD引脚冲突的方法
  17. 如何删除本地/远程Git分支
  18. Oracle Partner Levels and Diamond Partners List
  19. uni-app 99群公告推送功能(一)
  20. linux用户管理(2)----修改用户模式(usermod,sudo权限等)

热门文章

  1. 摸鱼加速小能手,实用笔刷快拿走
  2. uart转RS422
  3. 基于Linux系统mjpg_streamer流媒体移植(摄像头驱动移植)
  4. 解决《空中英语教室》Super MP3光盘繁体字乱码的方法
  5. CentOS7 系统安全加固实施方案介绍firewall防火墙设置端口
  6. 软件开发自由职业者,疫情时代~不老常青藤
  7. JavaScript基本数据类型以及内存分配
  8. CryEngine3 - Anlysis Rendering
  9. 怎么提高百度快照更新的频次?
  10. 打印机批量扫描显示服务器超时,惠普打印机常见故障及解决方法,27年打印故障经验总结...