2 a15115071701 A15115071701 于 2015.07.14 21:25 提问

关于mysql中order by与group by的问题

select * from (select * from t2 order by gid,col2 desc) as t group by gid

这条sql语句执行完之后,为什么gid的排序是增序的???

11个回答

guwei4037
guwei4037   Ds   Rxr 2015.07.14 21:34
已采纳

(select * from t2 order by gid desc,col2 desc)

给gid加个desc

guwei4037
guwei4037 回复A15115071701: 不错
2 年多之前 回复
A15115071701
A15115071701 是不是能这样理解,外面的查询是根据子查询的临时表来的,而group by 自带将分组的字段排序了,但没有指定排序关键字,所以就只有gid改成了增序排序呢
2 年多之前 回复
guwei4037
guwei4037 回复A15115071701: 你在外面加了group by,没有col2这一列。
2 年多之前 回复
A15115071701
A15115071701 那为什么不是col2增序,或者两者都是
2 年多之前 回复
guwei4037
guwei4037 回复A15115071701: 你外面加了一层查询,实际上默认的就是gid升序。
2 年多之前 回复
A15115071701
A15115071701 select * from (select * from t2 order by gid desc,col2 desc) as t group by gid这条的执行结果也是gid增序,col2降序
2 年多之前 回复
guwei4037
guwei4037 回复A15115071701: order by gid desc,col2 desc 两个字段都要加desc才都是降序
2 年多之前 回复
A15115071701
A15115071701 回复guwei4037: 就是想弄明白这条语句的执行结果为什么是gid增序,col2降序
2 年多之前 回复
guwei4037
guwei4037 回复A15115071701: 那就在外层加个order by gid,里面的排序去掉。
2 年多之前 回复
A15115071701
A15115071701 加上外面一层后就变成了gid增序,col2倒序了
2 年多之前 回复
strutce
strutce   Ds   Rxr 2015.07.14 21:34

语句先执行select * from t2 order by gid,col2 desc 对gid的排序,然后在分组的

Evankaka
Evankaka   Ds   Rxr 2015.07.14 21:32

select * from t2 order by gid,col2 desc执行过后取结果作为t
select * from t group by gid
这样每组都会取第一条显示出来

Evankaka
Evankaka 回复A15115071701: 你是想先按gid按降序排列,如果两个字段gid,再按col2降序?
2 年多之前 回复
A15115071701
A15115071701 select * from t2 order by gid,col2 desc这条语句的意思不应该是两个字段都是倒序排列吗,为什么结果是gid增序,col2倒序呢
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.07.14 21:38

虽然你子查询中是降序的,但你外面没有指定,所以缺省还是按升序排得。所以你需要显示指定order by xx desc

A15115071701
A15115071701 但是col2是降序的,这是怎么回事?
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.07.14 21:47
 select * from (select * from t2 order by gid,col2 desc) as t group by gid
 子句这么order by意义不大,放到最外层吧

 select * from (select * from t2 ) as t  group by gid order by gid desc  倒序写desc
A15115071701
A15115071701 我这个是要取每组gid中最大的col2,所以两个字段必须有
2 年多之前 回复
Alvin930403
Alvin930403   2015.07.14 21:51

因为默认的就是升序。应该在最外部加上这句话order by gid,col2 desc。
select * from (select * from t2) as t group by gid order by gid,col2 desc

strutce
strutce   Ds   Rxr 2015.07.14 22:05

select * from t2 group by gid order by col2 desc

A15115071701
A15115071701 谢谢,语句不能修改
2 年多之前 回复
frank_20080215
frank_20080215   2015.07.14 22:12

select * from (select * from t2 order by gid,col2 desc) as t group by** t.gid**

A15115071701
A15115071701   2015.07.14 22:16

谢谢诸位了,问题已经解决了。

u012401478
u012401478   2015.07.15 08:37

对,到最后面价格desc 的

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片