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查询当某个字段为什么是,如果另一个字段等于什么则报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)