使用group by分组之后子查询的order by排序失效的问题

2017-12-25 21:25:01来源:CSDN作者:alan_waker人点击

分享

需求:

1.首页的查询需要按照lrsj进行排序

2.每一条数据通过fchrq,chxh进行分组

原始的sql

	SELECT  fchrq,chxh FROM		(SELECT top 100 percent chxh,fchrq,lrsj FROM HCZZQD_source where chxh  is not null 			<include refid="resultWhereSqlv2" />		 ORDER BY lrsj desc) T		GROUP BY fchrq,chxh

按照正常逻辑貌似没错,子查询中是按照录入时间进行了排序,查询是使用group by进行了分组;

在使用分页插件后,应该是可以获取到数据的;

实际上确实获取到了数据,但是order by lrsj并没有生效,取出来的数据只是group by进行了分组;


方案一:<mission false>

top 100 percent 是取查询出来的所有数据,网上的偏方: top 100 percent 改为 top 99.999 percent 原理我并没有理解,但是对我的sql并没有生效,我不知道这个改动的适用范围

方案二:<mission success>

实际上很简单的sql,sql会对数据先进行分组在进行排序,而我上述写法是先排序再分组,之所以还这样写是因为分组的时候fchrq ,chxh 里面不包含lrsj.

所以我走进了误区:我的子查询好像只能获取字段fchrq,chxh.并不能获取lrsj, 然而事实上并不是

百度失败后,盯着sql突然想到了,按照group by进行分组确实不能直接获取到lrsj,因为是两个lrsj,可是我可以获取第一排数据的lrsj也就是max(lrsj);

于是改动成功:

          SELECT fchrq,chxh FROM HCZZQD_source where chxh  is not null 		<include refid="resultWhereSqlv2" />	 group BY fchrq,chxh	 ORDER by max(lrsj) desc

不需要子查询,直需要查询这个表一次即可;

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台