日期:2014-05-17  浏览次数:20809 次

谁能告诉我下这两段SQL的区别。
1) select * from ( select imsi as 用户IMSI,sum(low_dq_num) as 下行质差MR总数 from MR_LOW_DQ_IMSI group by imsi ) where rownum<=100

2) select imsi as 用户IMSI,sum(low_dq_num) as 下行质差MR总数 from MR_LOW_DQ_IMSI where rownum<=100 group by imsi 

为什么我用第一句sql能查出100行数据 ,而用第二句就只能查出81行数据



------解决方案--------------------
where rownum<=100
一个是在结果集里面取前100个。
一个是在前100个里面找结果集。

你说有什么不同?
------解决方案--------------------
当然是不一样的。
第一个是:先分组,然后 rownum<=100,这里的条数肯定是100条,
第二个是:先 rownum<=100 再分组,这里的条数肯定是小于等于100条的。
------解决方案--------------------
探讨
引用:

引用:
引用:

第一条语句执行没出错么。。。。明显错了好几个地方。



貌似没错 。

1。子查询没表别名
2。你的子查询里面根本不存ROWNUM 这个列


rownum是个函数。。 oracle。

------解决方案--------------------
探讨
1) select * from ( select imsi as 用户IMSI,sum(low_dq_num) as 下行质差MR总数 from MR_LOW_DQ_IMSI group by imsi ) where rownum<=100

2) select imsi as 用户IMSI,sum(low_dq_num) as 下行质差MR总数 from MR_LOW_DQ_IMSI w……