sql中order by和group by的区别 | 您所在的位置:网站首页 › aggregation数据集 › sql中order by和group by的区别 |
一、解释不一样 order by是SQL语句中的关键字,用于对查询结果的排序。ORDER BY 语句用于对结果集进行排序,默认的为升序。 group by语句从英文的字面意义上理解就是“根据(by)必定的规则进行分组(Group)”。它的做用是经过必定的规则将一个数据集划分红若干个小的区域,而后针对若干个小区域进行数据处理。 二、字段不一样 order by是按字段排序,后面必须列出排序的字段名,能够是多个字段名。 group by是按字段分类 ,必须有“聚合函数”来配合才能使用,使用时至少须要一个分组标志字段。 三、sql命令格式优先顺序不一样 group By关键字先对指定的分组条件将筛选获得的视图进行分组,将分组视图后不知足条件的记录筛选掉。 order By语句最后对视图进行排序,最终的结果就产生了。 扩展资料 order by和group by的用法示例 一、select * from 学生表 order by 年龄 查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示。 二、select 学号,SUM(成绩) from 选课表 group by 学号 按学号分组、查询每一个学号的总成绩。 三、select 学号,AVG(成绩) from 选课表 group by 学号 having AVG(成绩)>(select AVG(成绩) from 选课表 where 课程号='001') order by AVG(成绩) desc 查询平均成绩大于001课程平均成绩的学号、并按平均成绩的降序排列。
常常见sql语句中order by 1或者order by 2...order by N,有时候很莫名其妙.其实1表示第一个栏位,2表示第二栏位; 依此类推,当表中只有2个栏位时,oder by 3就会出错,这个跟order by 列名没有什么区别,不过在特殊状况下仍是颇有用的. 例如table1(p_code int,issue_date datetime,issue_num int) p_code issue_date issue_num101 2016-12-01 00:00:00.000 45102 2016-12-01 00:00:00.000 89102 2016-12-03 00:00:00.000 44103 2016-12-03 00:00:00.000 44101 2016-12-02 00:00:00.000 44101 2016-12-03 00:00:00.000 44101 2016-12-03 00:00:00.000 45101 2016-12-03 00:00:00.000 44101 2016-12-03 00:00:00.000 44102 2016-12-03 00:00:00.000 47101 2016-12-03 00:00:00.000 48104 2016-12-03 00:00:00.000 86101 2016-12-03 00:00:00.000 56101 2016-12-03 00:00:00.000 29101 2016-12-11 00:00:00.000 11
我想获取某个p_code过去(不含当天)10次的issue_num平均值, 可能咱们会这么写 select top 10 p_code, avg(issue_num) as avgissue from table1 where issue_date(select convert(varchar(10),getdate(),120))and p_code='101'group by p_codeorder by issue_date desc 可是以上写法是错误,的,会提示 Column "table1.issue_date" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.必需要求issue_date在group by中.因此咱们改为 select top 10 p_code, avg(issue_num) as avgissue from table1 where issue_date(select convert(varchar(10),getdate(),120))and p_code='101'group by p_code,issue_dateorder by issue_date desc 可是获得的结果倒是(今天是2016.12.11)p_code avgissue101 44101 44101 45 显然以上不是咱们想要的结果. 那么该如何结果这种问题呢,固然你能够再次进行avg()聚合运算,可是这里咱们既然说oder by N,那么就用这个知识来解决. 语句以下. select top 10 p_code, avg(issue_num) as avgissue from table1 where issue_date(select convert(varchar(10),getdate(),120))and p_code='101'group by p_codeorder by 2 desc 结果以下(今天是2016.12.11)p_code avgissue101 44 是否是很神奇呢! 固然做为码农,咱们尽可能用列名来解决,以便增长代码的可读性和易维护性. |
CopyRight 2018-2019 实验室设备网 版权所有 |