sql中order by和group by的区别 您所在的位置:网站首页 aggregation数据集 sql中order by和group by的区别

sql中order by和group by的区别

2022-12-22 05:43| 来源: 网络整理| 查看: 265

一、解释不一样

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 实验室设备网 版权所有