sql中order by和group by的区别
order by 和 group by 的区别:
1,order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。
2,group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
3,在使用group by的语句中,只能select用于分类的列(表达式),或聚合函数。where条件用于group by之前,having用于group by 之后对结果进行筛选。
扩展资料:
一、order by用法: 排序查询、asc升序、desc降序
示例:
1.select * from 学生表
2.order by 年龄
3.查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示也可以多条件排序、 比如 order by 年龄,成绩 desc
4.按年龄升序排列后、再按成绩降序排列。二、group by用法: 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。
示例:
1.select 学号,SUM(成绩) from 选课表 group by 学号 按学号分组、查询每个学号的总成绩
2.select 学号,AVG(成绩) from 选课表
3.group by 学号
4.having AVG(成绩)>(select AVG(成绩) from 选课表 where 课程号='001')
5.order by AVG(成绩) desc
6.查询平均成绩大于001课程平均成绩的学号、并按平均成绩的降序排列。
1、解释不同
order by是SQL语句中的关键字,用于对查询结果的排序。ORDER BY 语句用于对结果集进行排序,默认的为升序。
group by语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
2、字段不同
order by是按字段排序,后面必须列出排序的字段名,可以是多个字段名。
group by是按字段分类 ,必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
3、sql命令格式优先顺序不同
group By关键字先对指定的分组条件将筛选得到的视图进行分组,将分组视图后不满足条件的记录筛选掉。
order By语句最后对视图进行排序,最终的结果就产生了。

扩展资料
order by和group by的用法示例
1、select * from 学生表 order by 年龄
查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示。
2、select 学号,SUM(成绩) from 选课表 group by 学号
按学号分组、查询每个学号的总成绩。
3、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_num
101 2016-12-01 00:00:00.000 45
102 2016-12-01 00:00:00.000 89
102 2016-12-03 00:00:00.000 44
103 2016-12-03 00:00:00.000 44
101 2016-12-02 00:00:00.000 44
101 2016-12-03 00:00:00.000 44
101 2016-12-03 00:00:00.000 45
101 2016-12-03 00:00:00.000 44
101 2016-12-03 00:00:00.000 44
102 2016-12-03 00:00:00.000 47
101 2016-12-03 00:00:00.000 48
104 2016-12-03 00:00:00.000 86
101 2016-12-03 00:00:00.000 56
101 2016-12-03 00:00:00.000 29
101 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_code
order 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_date
order by issue_date desc
但是得到的结果却是(今天是2016.12.11)
p_code avgissue
101 44
101 44
101 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_code
order by 2 desc
结果如下(今天是2016.12.11)
p_code avgissue
101 44
是不是很神奇呢!
当然作为码农,我们尽量用列名来解决,以便增加代码的可读性和易维护性.
sql中order by和group by的区别的更多相关文章
- mysql 中order by 与group by的顺序
mysql 中order by 与group by的顺序 是: select from where group by order by 注意:group by 比order by先执行,order b ...
- sql中的 where 、group by 和 having 用法解析
--sql中的 where .group by 和 having 用法解析 --如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 ...
- linq中order by 和group by (含lambda表达式实现)以及综合案例
一.Linq应用场景 linq的语法通过System.Linq下面的Enumerable类提供支持,也就是说,只要是实现了IEnumerable<T>的对象都可以使用Linq的语法来查询. ...
- 述 SQL 中的 distinct 和 row_number() over() 的区别及用法
1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...
- sql中内联 和外联 区别
sql中内联 和外联 区别 2007-05-15 17:37 这个概念一般看书不好理解.其实夜简单.有例子就简单了. 比如: 表A(主表) cardid username 16 aa 23 bb 25 ...
- SQL中IS NOT NULL与!=NULL的区别
平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...
- SQL中order by;group up;like;关联查询join on的用法
排序order by的用法: 1.order by 字段名1 asc/desc, 字段名2 asc/desc,... 先按照字段名1的升序/降续给表进行排列 然后 按照字段名2的升序/降续给表进行排列 ...
- SQL中on条件与where条件的区别(转载)
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...
随机推荐
- IIS-This configuration section cannot be used at this path.
Q:在IIS上部署web后,游览器打开报以下异常: This configuration section cannot be used at this path. This happens when ...
- table标签修改tr,td标签的行距
修改tr标签的行距,tbale标签的td标签间距 看如下Css文件的代码,其都没有table的tr行距产生效果 tr{ margin-top: 10px; padding: 10px; } td{ m ...
- Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接. at org ...
- 示例 NetworkWordCount
import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.{Seconds, StreamingCo ...
- Intellij IDEA – How to build project automatically
By default, Intellij IDEA doesn’t compile classes automatically. But, you can enable the auto compil ...
- C语言蓝桥杯比赛原题和解析
蓝桥杯:在计算机编程领域,是具有一定含金量的竞赛,用于选拔信息技术人才. 一般分为多个领域,其中包含了C/C#/C++/Java/Python等编程语言的测试题,多为算法的设计题. 下面,在搜题过程中 ...
- grep命令选项
-c:只输出匹配行的计数. -I:不区分大 小写(只适用于单字符). -h:查询多文件时不显示文件名. -l:查询多文件时只输出包含匹配字符的文件名. -n:显示匹配行及 行号. -s:不显示不存在或 ...
- MySQL 是怎么保证数据一致性的(转载)
在<写数据库同时发mq消息事务一致性的一种解决方案>一文的方案中把分布式事务巧妙转成了数据库事务.我们都知道关系型数据库事务能保证数据一致性,那数据库到底是怎么设计事务这一特性的呢? 一. ...
- js实现大文件上传分片上传断点续传
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- LeetCode算法题-链表类
1.将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. (可以参照第2的merge2List实现) 示例: 输入:1->2->4, 1->3 ...