order by 和 group by 的区别

order by 和 group by 的区别,第1张

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降序

示例:

1select from 学生表 

2order by 年龄  

3查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示也可以多条件排序、 比如 order by 年龄,成绩 desc  

4按年龄升序排列后、再按成绩降序排列。

二、group by用法:  分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

示例:

1select 学号,SUM(成绩) from 选课表 group by 学号  按学号分组、查询每个学号的总成绩

2select 学号,AVG(成绩) from 选课表

3group by 学号

4having AVG(成绩)>(select AVG(成绩) from 选课表 where 课程号='001')

5order by AVG(成绩) desc

6查询平均成绩大于001课程平均成绩的学号、并按平均成绩的降序排列。

参考资料:

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

Group

By

Having,

Where

,Order

by这些关键字是按照如下顺序进行执行的:Where,

Group

By,

Having,

Order

by。

一、使用count(列名)当某列出现null值的时候,count()仍然会计算,但是count(列名)不会。

二、数据分组(group

by

):

select

列a,聚合函数(聚合函数规范)

from

表明

where

过滤条件

group

by

列a

group

by

字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group

by

在后。即先对select

xx

from

xx的记录集合用where进行筛选,然后再使用group

by

对筛选后的结果进行分组。

三、使用having字句对分组后的结果进行筛选,语法和where差不多:having

条件表达式

需要注意having和where的用法区别:

1having只能用在group

by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

2where肯定在group

by

之前,即也在having之前。

3where后的条件表达式里不允许使用聚合函数,而having可以。

四、当一个查询语句同时出现了where,group

by,having,order

by的时候,执行顺序和编写顺序是:

1执行where

xx对全表数据做筛选,返回第1个结果集。

2针对第1个结果集使用group

by分组,返回第2个结果集。

3针对第2个结果集中的每1组数据执行select

xx,有几组就执行几次,返回第3个结果集。

4针对第3个结集执行having

xx进行筛选,返回第4个结果集。

5针对第4个结果集排序。

当我们看到一个类似上述的包含了where,

group

by,

having,

order

by等关键字的SQL时,我们要首先要知道其执行顺序是怎样的,才能判断出其所表达的含义;

下面列出其执行顺序:

1

根据where子句选择行;

2

根据group

by

子句组合行;

3

根据having子句筛选组;

4

根据order

by子句中的分组函数的结果对组进行排序,order

by必须使用分组函数或者使用Group

by子句中指定的列;

下面看一个例子:

我们现在知道,其执行顺序如下:

1基于Where

Rating>1

筛选出符合条件的行;

2基于group

by

CategoryName

对筛选的结果进行分组;

3为每个CategoryName组计算Count()

4

基于having

CategoryName

like

'A%'留下符合条件的组

5

根据order

by

的条件对剩下的行组进行排序,SQL中的count()也是分组函数。

select语句中的字段没有在groupby子句中出现导致的。

如果有groupby语句,select后面的字段要么在groupby中出现,要么在聚合函数中出现。设置字段的默认值为函数表达式,但不同数据库的设置方式不一样。另外的确也可以使用触发器批量修改只需要使用一个update语句。

结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。

group

by

“分组”查询,就是把记录集中的记录按一定规则进行“分组统计”。

假设一个学生名单表,有班级、姓名

,性别

3个字段,

如果想查询每个班有多少个学生:

(这是以“班级”分组统计人数)

select

班级

,count(姓名)

as

数量

from

学生名单表

group

by

班级;

如果出现每个班的男女生数量:(这是以“班级”及“性别”为分组统计人数)

select

班级

,性别,

count(姓名)

as

数量

from

学生名单表

group

by

班级,性别;

学生表:student 字段成绩:score 字段班级:classid 统计学生个个班级成绩 select sum (score) from sutdent group by classid

表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接着第2个字段值相同的记录中,再根据第3个字段的值进行分组依次类推。

以上就是关于order by 和 group by 的区别全部的内容,包括:order by 和 group by 的区别、数据库中,select where group by having 执行顺序、sql查询当某个字段为什么是,如果另一个字段等于什么则报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9648965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存