也谈MySQL中实现ROWNUM
来源:互联网 发布:淘宝书店货源 编辑:程序博客网 时间:2024/05/29 18:37
来源 http://e-xia.com/2009/06/rownum-in-mysql/
在工作中碰到这样的问题,在生成报表时第一列要输出top 1, top 2, ... , top 10。而mysql并不自带这样的功能。假设我们有这样的一个表:
mysql> create table tbl (
-> id int primary key,
-> col int
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> insert into tbl values
-> (1,26),
-> (2,46),
-> (3,35),
-> (4,68),
-> (5,93),
-> (6,92);
Query OK, 6 rows affected (0.05 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> select * from tbl order by col;
+----+------+
| id | col |
+----+------+
| 1 | 26 |
| 3 | 35 |
| 2 | 46 |
| 4 | 68 |
| 6 | 92 |
| 5 | 93 |
+----+------+
6 rows in set (0.00 sec)
中规中矩的做法是:
但是这样就变成了两个query,在java里面用executeQuery会有问题。
当时自己想到的是这样:
但是第一次运行的时候rownum都是1,第二次运行rownum变成2-11,第三次为12-21。
后来又看到一些很悬,而且看上去很没有效率的方法,例如:
使用联接查询(笛卡尔积)
子查询
这些都不是我要的!!
最后我找到了第一种方法的改良思路,做了一些改动,虽然还是绕了一个小弯,但是已经很好用了:
更进一步的应用是,当有两个table要并排放在一起,例如一个order by id,另一个order by col,原先的做法是写两个query,然后在页面里并排放,不过有了rownum以后就可以用join直接输出完全符合要求的table了。
参考材料:
- MySQL中的ROWNUM的实现
- How to number rows in MySQL
看看还有啥
- 也谈MySQL中实现ROWNUM
- mysql中RowNum的实现
- MySQL 中 RowNum 的实现
- mysql中RowNum的实现
- mysql中RowNum的实现
- mysql实现ORACLE 中ROWNUM函数
- MySQL中实现rownum伪劣排序
- mysql实现rownum问题
- mysql rownum 实现
- mysql 实现 rownum
- MySQL实现rownum
- MySQL的ROWNUM实现
- MySQL 的 RowNum 实现
- MySQL 的 RowNum 实现
- mysql实现rownum
- MySQL 的 RowNum 实现
- MySQL 的 RowNum 实现
- MySQL 的 RowNum 实现
- 详解4字节对齐
- Java:判断文件的编码
- 2009年的个人所得税和社保计算
- 习题
- web层安全防范
- 也谈MySQL中实现ROWNUM
- VC++6.0下的输入输出操作符重载问题解决
- oracle数据库
- 有关存储过程
- C#联系
- 转:CE6内核启动过程-新角度
- 经营人脉、参加派对、利用猎头,用好这三种途径,你也可以做一回职场牛人,不用简历照样越跳越高。
- 近来写博心态的一点变化
- 异常处理之最佳实践(Best Practices for Exception Handling )