aluckdog
在我说什么时候产生的之前,我想说一下SELECT这个查询语句的执行顺序问题:语法是:select * from table_namewhere conditons1group by some_columnhaving conditions2order by some_column;执行时是这样的:先从表中查询出所有的数据,然后conditions1中筛选出符合条件的数据,然后对数据进行分组,having是对分组后的数据进行筛选,最后进行排序,不过聚合函数与group by一起出现时,聚合函数会后执行.明白这个之后,rownum这个伪列就不可能会在where之后出现,所以不管查询有什么条件,在完成select * from table_name这个时候,它就出现了,就会在表的每一行上按顺序加上rownum.比如你说的这个查询如果想按顺序出现rownum应该这样写:select a.*,rownum a_rownum from(select * from test group by a.sysid) a;当然了里面的子查询要正确;如果说你想对test表中的数据查询出来之后,按SYSID这一列进行排序后查询3到5条数据,类似于小数据量(千万条以内)的先排序后分页:语句可以这样写select * from (select a.*,rownum t_rownum from (select * from test order by sysid)) where t_rownum between 3 and 5;总之就是说:select a.* ,rownum a_rownum from table_name a时就会在列上按顺序加上rownum.