比如select * from user group by department order by age ,我想先按照部门分组,然后按年龄排序,不知道这个sql的执行顺序是否如此?也就是说,是否是先执行group by ,然后再在每一组中按年龄进行排序?还是在分组后,对分组后的结果进行排序?
如果我想要先进行分组,然后在每一组中的年纪进行排序(不是对分组后出来组的结果进行年龄排序),这个sql应该如何写?谢谢!

解决方案 »

  1.   

    group by->order by
    SQL语句不规范,贴记录及要求结果出来看看
      

  2.   

    估计你想要的是select * from user order by department,age ,这个吧。
      

  3.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   

    select t.department,t.age from user group by t.department,t.age order by t.age
      

  5.   

    语法上 是先分组 然后再分别对每组排序 
    你的语句有问题 
    select * 后面+GROUP BY 这样不对 你分组了 都没聚合函数即使没错 也没意义。。
      

  6.   

    粗浅的理解的话,
    SELECT的语法顺序就是起执行顺序FROM 
    WHERE (先过滤单表/视图/结果集,再JOIN)
    GROUP BY
    HAVING (WHERE过滤的是行,HAVING过滤的是组,所以在GROUP之后)
    ORDER BY
      

  7.   

    DROP TABLE IF EXISTS `TableName1`;CREATE TABLE `TableName1` (
      `name` varchar(50) default NULL,
      `depart` varchar(50) default NULL,
      `age` int(11) default NULL,
      `id` bigint(20) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `TableName1` */insert  into `TableName1`(`name`,`depart`,`age`,`id`) values ('user1','a',25,1),('user2','a',28,2),('user3','a',27,3),('user4','b',23,4),('user5','b',29,5),('user5','c',32,6);
    想要的结果:user6  c   32
    user5  b   29
    user1  a   28