sql中order by和group by的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中order by和group by的区别相关的知识,希望对你有一定的参考价值。

RT,请明确指出

1、意思不一样。

order by 是指从英文里理解就是行的排序方式,默认的为升序。后面必须列出排序的字段名,可以是多个字段名。

group by 是指从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。 

2、适用范围不同:order by 用于排序,一般与asc升序或desc降序一起使用。例如select * from 表A order by 列a。

group by 用于分类汇总,一般与聚合函数(比如avg平均、sum合计、max最大、min最小、count计算行)一起使用。例如select 月份,sum(工资)as 总工资 from 工资表 group by 月份。

3、定义不同:order by主要侧重许多数据的排序,例如按照大小顺序对数据进行排列,group by主要侧重许多数据的分组,例如按照性别、年龄、国家、学科等进行分组。

4、使用的函数不一样。

order by子句中的列必须包含在聚合函数或 GROUP BY 子句中。

group by 子句中可使用的函数AVG()  、MIN() 、 MAX()  、SUM() 、COUNT() 。

5、order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

扩展资料

Microsoft Jet 数据库引擎 SQL 数据类型 由13个基本数据类型组成,它们是由 Microsoft Jet 数据库引擎和几个验证过的有效同义字定义的。常见的有:整形,单精度,双精度,可变长度字符,固定长度字符,长型,日期等等。

可以用ALTER TABLE 语句修正基数和增量。刚插进表中的行会有自动为基于新种值和增量值的列生成的值。如果新种和增长的值和以前的种值及增量匹配,就会造成复制。如果这个列是主键,复制值生成时可能导致错误。

定义成TEXT也称作MEMO)或CHAR(也称作有具体长度的 TEXT(n))的字段中的字符被储存在 Unicode 表示格式。

Unicode字符一律需要两个字节存储每一字符。对于现有的主要包含字符数据的 Microsoft Jet数据库,这可能意味着数据库文件被转换成 Microsoft Jet 4.0格式时字长会增加将近一倍。

然而,从前由单字节字符群(SBCS)指示的众多字符群的Unicode 表示可以很容易地被压缩成一个单字节。有关的详细信息,参见CREATE TABLE。如果用COMPRESSION属性定义CHAR列,数据存储时会自动被压缩,提取时解压缩。

参考资料来源:百度百科-SQL数据类型

参考技术A

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课程平均成绩的学号、并按平均成绩的降序排列。

参考资料:

百度百科- 结构化查询语言

参考技术B

1、适用范围不同:

order by
用于排序,一般与asc升序或desc降序一起使用。例如select * from 表A order by 列a。group by
用于分类汇总,一般与聚合函数一起使用。

2、定义不同:

order by主要侧重许多数据的排序,例如按照大小顺序对数据进行排列,group by主要侧重许多数据的分组,例如按照性别、年龄、国家、学科等进行分组。

3、主要用途不同:

order
by 是按表中某字段排列表中数据。group by 是按某些字段分类。

扩展资料

order by的用法:

首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句。

其次,order by写法:

1、select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,.......

2、select 字段列表/* from 表名 where 条件 order by 字段序号 asc/desc, 字段序号 asc/desc,.......(此时字段序号要从1开始)

然后,order by的方式:

1、asc 升序,可以省略,是数据库默认的排序方式。

2、desc 降序,跟升序相反。

最后要注意order by的原则,写在最前面的字段,他的优先级最高,也就是写法中第一个的字段名1的优先级最高,优先执行他的内容。

参考技术C

1、解释不同:

(1)order by是SQL语句中的关键字,用于对查询结果的排序。ORDER BY 语句用于对结果集进行排序,默认的为升序。

(2)group by语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。

2、字段不同:

(1)order by是按字段排序,后面必须列出排序的字段名,可以是多个字段名。

(2)group by是按字段分类 ,必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。 

3、sql命令格式优先顺序不同:

(1)group By关键字先对指定的分组条件将筛选得到的视图进行分组,将分组视图后不满足条件的记录筛选掉。

(2)order By语句最后对视图进行排序,最终的结果就产生了。

4、引用列名不同:

(1)order by语句中引用列名可以使用IDE。

(2)group by需要引用列名则只能使用ID,而不能使用IDE。

5、排序方法不同:

(1)order by 语句默认按照升序对记录进行排序。

(2)group by语句指定的列对满足Where条件的所有记录分组,并对组内的一些数值型栏位计算出每组的一个统计指标,如求和、求个数、求平均值、求最大值、求最小值等等。

6、查找范围不同:

(1)order by子句能用于查找组记录特征和某条记录的详细信息;

(2)group by子句只能用于查找组记录特征,但不能查找某条记录的详细信息。Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。

7、使用的函数不一样:

(1)order by放在from table_name后面。可以用于根据指定的列asdf对结果集进行排序。按照降序对记录进行排序,可以使用 DESC 关键字。

(2)group by子句中可使用的函数AVG()  、MIN() 、 MAX()  、SUM() 、COUNT() 。group by all 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。

扩展资料:

一、GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。

group by a,b,c;则a,b,c三个字段是按照先按a字段对数据行进行排序,再按b字段对那些字段a为同一个值的数据行进行排序,再再按c字段对那些字段a为同一个值且字段b为同一个值的数据行进行排序。

二、Group By, Having, Where, Order by几个语句的执行顺序。

一个SQL语句往往会产生多个临时视图,以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

1、首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数);

2、然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组;

3、接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉;

4、然后按照Order By语句对视图进行排序,这样最终的结果就产生了。

在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名。

参考资料来源:百度百科-GROUP BY

参考资料来源:百度百科-order by

参考技术D

order by 是按表中某字段排列表中数据。


group by 是按某些字段分类。

以下是详细区别:

1、排序方式不一样:

order by是指按字段排序;

group by是指按字段分类 。

2、命令格式优先顺序不一样:

order by要滞后;

group by要优先。

3、含义不一样:

Group By是分组的意思,Order By是按顺序的意思。

4、使用的函数不一样:

Group By是汇总查询,使用时至少需要一个分组标志字段,一般与聚合函数(比如sum合计、count计算行、avg平均)一起使用。

Order By是排序查询,用于对指定列结果集的排序,排序内容可以是数字或者文字,其中DESC是降序,ASC是升序。

5、定义不一样:

order by主要侧重许多数据的排序,例如按照大小顺序对数据进行排列;

group by主要侧重许多数据的分组,例如按照性别、年龄、国家、学科等进行分组。

扩展资料:

SQL使用技巧代码大全:

1、编辑

1=1,1=2的使用在SQL语句组合时用的较多,“where 1=1”是表示选择全部 “where 1=2”全部不选。

如:if @strWhere !='begin

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

end else begin set @strSQL = 'select count(*) as Total from [' + @tblName + ']' end

set @strSQL='select count(*) as Total from tablename where 1+1'

if(@strWhere!='')

set @strSQL=@strSQL+’and’+strWhere

2、收缩数据库

(1)重建索引 :

DBCC REINDEX

DBCC INDEXDEFRAG

(2)收缩数据和日志:

DBCC SHRINKDB

DBCC SHRINKFILE

(3)压缩数据库:

dbcc shrinkdatabase(dbname)

(4)转移数据库给新用户以已存在用户权限:

exec sp_change_users_login 'update_one','newname','oldname' go

(5)检查备份集:

RESTORE VERIFYONLY from disk='E:\\dvbbs.bak'

(6)修复数据库:

Alter DATABASE [dvbbs] SET SINGLE_USER GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK GO

Alter DATABASE [dvbbs] SET MULTI_USER GO

参考资料来源:百度百科-SQL语句大全

百度百科-结构化查询语言

oracle中,还是不甚明白order by和group by的用法

select * from scott.emp group by deptno (×)
select * from scott.emp order by deptno(√)
还有group by 分组,的顺序怎么回事?
select avg(sal),max(sal) ,job ,deptno from emp group by job, deptno;
回车显示的既不是以job 分组,也不是以deptno分组的。

我甚是理解你 我开始也很不明白
order by是排序
如order by ID 表示按ID 升序排列
order by ID,NUM 表示优先按照ID排序 ID相同的再按NUM排序 这个意思

group by 是分组
首先用group by 的前提是你的select里边用了聚合函数如sum(),avg(),min(),max()
没有聚合函数用不了group by会报错
其次 出现在select里边的除聚合函数以外的所有字段 都必须作为group by的条件
出现在group by中的字段可以不select出来
也就是说 select中的字段必须出现在group by中 group by中的分组条件不一定出现在select中
你的例子中 select * 表示所有字段 这个时候必须所有字段group by 你只group by deptno肯定报错
再次 group by 的顺序类似order by
如 group by A,B,C,D责先按A分组 再按BCD这个顺序分组
group by条件越多分组越细 也就是说 假如A是学校 B是学院 C是专业 D是班级 那最后group by的结果是按照有多少个不同的班级分组 按照最细致的分组

因为我对这个感触颇深希望我的理解对你有帮助追问

最细致的分组,比如说A可以是清华,北大;B是计算机,电子;C是编程技术,网络基础;D是计算机科学班1,电气化科学班2;
那排序是按照计算机科学班1和电气化科学班2分组,但是这两个班既可以是网络专业,也可以是编程技术的,还可以是计算机学院的,也可以是电子学院的。。而且或许是清华的或许是北大的?
还是很乱套的样子。

追答

所以说group by的条件越多 分组越细 越没有意义
给你一个前辈给我讲时的列子你再理解一下:
A B C D 数量
001 B1 C1 D1 10
001 B2 C2 D2 20
002 B3 C3 D3 30
002 B3 C3 D4 40
GROUP BY条件 分组结果求SUM(数量)
A 2行 30
70
A,B 3行 10
20
70
A,B,C 3行 10
20
70
A,B,C,D 4行 10
20
30
40
我觉得这个例子应该很明确分组概念了 你可以理解一下
如果还不明白可以继续探讨

参考技术A

Oracle Order By子句

在Oracle中,表中是以非指定顺序存储行数据记录的,它不管行插入数据库的顺序如何。要按列以升序或降序查询行记录,必须明确指示Oracle数据库要如何去排序。

例如,您可能希望按名称的字母顺序列出所有客户,或者按照从最低到最高信用限额的顺序显示所有客户。

要对数据进行排序,我们可以将ORDER BY子句添加到SELECT语句中,参考以下语法:

要按列排序结果集,可以在ORDER BY子句之后列出该列。

按照列名是一个排序顺序,可以是:

    ASC表示按升序排序

    DESC表示按降序排序

默认情况下,无论是否指定ASC,ORDER BY子句都按升序对行进行排序。如果要按降序对行进行排序,请明确使用DESC。

NULLS FIRST在非NULL值之前放置NULL值,NULLS LAST在非NULL值之后放置NULL值。

ORDER BY子句可以按多列对数据进行排序,每列可能有不同的排序顺序。

请注意,ORDER BY子句总是SELECT语句中的最后一个子句。

GROUP BY 是一个聚合子句,相当于把查询出的结果按某种方式分组。

教程来源:树懒学堂_一站式数据知识平台_Oracle Order By子句

参考技术B order by 顾名思义,就是排序的意思 order by 某列(column) 就是你查看的结果是根据某列的升降序显示的。
group by ,分组函数,关注的是 group by 列,中列的查询结果。当 group by和order by 一起使用时,先执行group by 在执行 order by。

你的sql 使用了聚合函数,是对 avg()max() 列做平均和最大值运算,是以这2个共同结果为分组的。追问

以这两个结果分组?那结果是随意显示的么?既然分组了 怎么看不出谁和谁是一组?

追答

你可以吧查询结果贴出来一下,结果是 以上2个分组+avg()升序来显示。

参考技术C 一个排序 一个分组 怎么不明白呀 不是一个意义呀

一个是用来改结果集的顺序的

一个是用来统计某些字段信息的

group by 不带排序功能

你可以group by了之后 order by 1,2

以上是关于sql中order by和group by的区别的主要内容,如果未能解决你的问题,请参考以下文章

sql中order by和group by的区别

sql中order by和group by的区别

sql语句执行顺序之group by、order by

SQL数据库中查询语句Order By和Group By有啥区别

SQL里面group by 语句和WHERE的区别,高手进

SQL数据库中查询语句Order By和Group By有啥区别