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条件是在生成临时表时使用的条 ...
随机推荐
- Win10 C盘 系统和保留 占用空间 非常大
Win10 C盘 系统和保留 占用空间 非常大今天在写代码的时候,突然发现Redis起不来了,一看原因,是因为C盘空间不足.然后,我看了下C盘,发现...一个叫系统和保留的东西,居然占了110G的空间 ...
- Docker容器化技术(下)
Docker容器化技术(下) 一.Dockerfile基础命令 1.1.FROM - 基于基准镜像 FROM centos #制作基准镜像(基于centos) FROM scratch #不依赖任何基 ...
- elementui 多组件表单验证
最近在做管理后台,vue2.0基于elementui框架进行开发. elementui的api中表单验证都是单个vue文件的验证.而我的保存按钮放在了父组件了,验证对象为三个子组件我的灵机一动 想 ...
- 非正常卸载Chrome浏览器导致无法重新安装
昨晚在使用selenium的时候,Chrome浏览器和Chromedriver.exe不兼容,前几天使用的时候都没问题,查看浏览器版本后发现浏览器已经自动升级为67版本(我之前安装的是61版本). 于 ...
- webpack loader和插件的编写原理
webpack自定义loader和插件的api网址:https://www.webpackjs.com/api/loaders/ 点击顶部API,看左侧api: 1. 如何编写一个loader 实现的 ...
- NET Framework 的泛型
NET Framework 的泛型 泛型是具有占位符(类型参数)的类.结构.接口和方法,这些占位符是类.结构.接口和方法所存储或使用的一个或多个类型的占位符.泛型集合类可以将类型参数用作它所存储的对象 ...
- bind、apply、call的理解
一直感觉代码中有call和apply就很高大上(看不懂),但是都草草略过,今天非要弄明白!以前总是死记硬背:call.apply.bind 都是用来修改函数中的this,传参时,call是一个个传参, ...
- Hibernate的持久化对象
Hibernate的持久化类 什么是持久化类 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类. * ...
- 批量下载oracle jdk
1.打开 https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html 2.同意条款 3. ...
- 5.5(OI一本通开始)
一, 第一个程序有错误, 1, 每个语句(每行?0)要有分号