首页 » SQL Server » 使用group by分组之后子查询的order by排序失效的问题

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

原文 http://blog.csdn.net/alan_waker/article/details/78892017

2017-12-26 02:01:12阅读(438)

需求:

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

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

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹