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

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

A15115071701
A15115071701 但是col2是降序的,这是怎么回事?
大约 3 年之前 回复
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,所以两个字段必须有
大约 3 年之前 回复
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 谢谢,语句不能修改
大约 3 年之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Mysql的distinct语句和group by,order by
 最近,在做一个项目的时候,发现得出的数据于预料的相差很多,仔细的研究了一下,发现问题出在 distinct语句和groupy by,order by首先,distinct语句,获得非重复的(唯一)行记.grouy by是分组,order by 是排序。直接看我的例子。假定我有一个表f_job,有字段:select job_id, com_id,job_time from f_job or
关于mysql中 group by , order by , where, having 语句的区别与运用
最近一直在忙着和数据库有关的一些工作,这几天在写存储过程的时候,一些mysql的语句突然感觉有些不太明白,就是group   by   ,  order   by  ,where   ,  having这些语句,这次通过一个实例来总结和归纳一下,这几个语句的用法,仅供以后参考学习。 一.   首先以字面形式阐述一下这几个语句的功能:     group  by:从英文上理解  就是分组的意思。
MySQL中group by和order by同时使用
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表    我现在需要取出每个分类中最新的内容 select * from testgroup by category_id order by `date` 结果如下    明显。这不是我想要的数据,原因是msyql已经的执行顺序是  引用 写的顺序:select ... from... w
mysql 中order by 与group by的顺序
ysql 中order by 与group by的顺序 是: select from where group by order by   注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group by中最大的或最小的某一字段使用 max或min
mysql group by 与order by 一起使用
今天在做mysql分组查询的时候遇到一个问题:    我需要把数据分组排序,于是就想到先group by 然后 order by,可以运行的时候报错    于是上午搜了下才发现group by 与order by 一起使用是要遵守一定原则的:    1.order by 的列,必须是出现在group by 子句里的列    例如:SELECT dep.department_name,
mysql :group by 与order by 共同使用时排序问题,小心utf8的排序
mysql :group by 与order by 共同使用时排序问题,小心utf8的排序
MYSQL 中group by,order by用法详解及其特殊用法
我们可以看到GROUP BY 是优先对跟在他后面的第一个字段进行排序的并且也只对这一个字段进行排序,而且如果GROUP BY 后面跟的字段不只一个的话,那么GROUP BY就不会再对排序后的结果进行去重了。 那么ORDER BY 是不是优先对跟在他后面的第一个字段进行排序的并且也只对这一个字段进行排序呢?让我们来看一组例子:
mysql中group by和order by同时使用无效的替代方案
前言最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生。在此做个记录,以备不时之需。需求(得到所有barCode的最新的一条数据)首先,看一下整体的表结构。 现在查找每个barCode中最新的数据。由于数据太多,不是很好看到效果。我们就拿一个barCode为4565789的数据做示例。SELECT
MySQL数据库操作---group by、having、where、order by的使用
SUM函数用来求和、group by用来分组查询。一、建表、插入数据1、创建一个student表2、查看student表结构3、插入6条数据4、插入了6条数据后,我们可以发现自增数据(auto_increment)的默认值已变为7。二、操作实例1、给出各个部门最高分数的学生。 要想得到各个部门学生,首先就要分组,按照部门把他们分组,然后在各个部门中找到分数最高的就可以了。2、进一步,分数最高的必须
关于mysql的limit、order by和group by的用法
<br /><br />用mysql很长时间,limit是分页的一个好工具,<br />select * from table_a where num = 4 limit 1,10,<br />select * from table_a where num = 4 limit 10,10,<br />今天突然发现有些数据怎么也不会出来<br />也就是说第一页的数据会重复显示在第二页,有些在数据库的数据不会被查询出来<br />这样就造成了数据的缺失,如果用<br />select * from table