在SQL中使用GROUP BY来对SELECT的结果进行数据分组,在具体使用GROUP BY之前需要知道一些重要的规定。
- GROUP BY子句可以包含任意数目的列。也就是说可以在组里再分组,为数据分组提供更细致的控制。
- 如果在GROUP BY子句中指定多个分组,数据将在最后指定的分组上汇总。
- GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
- 出了聚集计算语句外,SELECT语句中的每一列都必须在GROUP BY子句中给出。
- 如果分组列中有NULL值,则NULL将作为一个分组返回。如果有多行NULL值,它们将分为一组。
- GROUP BY子句必须在WHERE子句之后,ORDER BY之前。
过滤分组
对分组过于采用HAVING子句。HAVING子句支持所有WHERE的操作。HAVING与WHERE的区别在于WHERE是过滤行的,而HAVING是用来过滤分组。
另一种理解WHERE与HAVING的区别的方法是,WHERE在分组之前过滤,而HAVING在分组之后以每组为单位过滤。
分组与排序
一般在使用GROUP BY子句时,也应该使用ORDER BY子句。这是保证数据正确排序的唯一方法。
SQL SELECT语句的执行顺序:
- from子句组装来自不同数据源的数据;
- where子句基于指定的条件对记录行进行筛选;
- group by子句将数据划分为多个分组;
- 使用聚集函数进行计算;
- 使用having子句筛选分组;
- 计算所有的表达式;
- 使用order by对结果集进行排序;
- select 集合输出。
举个例子吧。
1 |
select 考生姓名, max (总成绩) as max 总成绩
|
2 |
from tb_Grade
|
3 |
where 考生姓名 is not null
|
4 |
group by 考生姓名
|
5 |
having max (总成绩) > 600
|
6 |
order by max 总成绩
|
在上面的示例中 SQL 语句的执行顺序如下:
- 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
- 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
- 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组
- 计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值
- 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的
- 执行 ORDER BY 子句, 把最后的结果按 "Max 成绩" 进行排序
- 详见:http://www.nowamagic.net/librarys/veda/detail/147
相关推荐
今天小编就为大家分享一篇关于分组查询GROUP BY的使用与SQL执行顺序的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序
sql解析顺序,sql中包含select,from,join,on,where,group by,having,order by的解析顺序
mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...
3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、使用order by对结果集进行排序。 举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 ...
可以完成对分组的数据进行增加排序,partition by可以与以上三个函数联合使用。 利用partition by按照班级名称分组,学生id排序 select s.id, s.name, cid, c.name, row_number() over(partition by c.name order ...
SQL 语句的执行顺序跟其语句的语法顺序并不一致 一般而言 SQL 语句的语法顺序是: SELECT[DISTINCT] FROM WHERE GROUP BY HAVING UNION ORDER BY 其执行顺序为: FROM WHERE GROUP BY HAVING SELECT DISTINCT UNION...
标题:按某字段合并字符串之一(简单合并) ...即:group by id, 求 value 的和(字符串相加) 1、sql2000中只能用自定义的函数解决 create table tb(id int, value varchar(10)) insert into tb values(1,
SQL查询语句执行顺序如下: (7) SELECT (8) DISTINCT <select_list> (1) FROM (3) <join> JOIN (2) ON (4) WHERE (5) GROUP BY <group> (6) HAVING (9) ORDER BY (10) LIMIT 前期准备工作 1、新建一...
目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...
今天大概弄懂了partition by和group by的区别联系。 1. group by是分组函数,...3.partition by相比较于group by,能够在保留全部数据的基础上,只对其中某些字段做分组排序(类似excel中的操作),而group by则只
文章目录测试数据1 sql执行顺序2 order by 和 group by什么时候会出现Using filesort — 理论3 order by 和 group by什么时候会出现Using filesort — 实践3.1 不会出现 Using filesort的情况 — 符合最佳左前缀法则...
6.2.4 使用别名 6.3 排序与分组 6.3.1 升序排序与降序排序 6.3.2 多列字段排序 6.3.3 使用GROUPBY子句对查询结果进行分组 6.3.4 HAVING子句的应用 6.4 条件查询 6.4.1 WHERE单条件语句查询 6.4.2 运算符查询 6.4.3 ...
sql经典教程,非常全面。包括比较难理解的group by以及having指令的使用。对sql语句的执行顺序也有部分介绍,总之,是不可多得的学习sql的文档。真是居家旅行。。。
今天在写一条语句的时候,在查询分析器里边执行 要用10s,换用另外一种写法只用少于1s的时间,同事说是因为Sql句语执行顺序的原因。之前看过一点相 关的书,有一点印象,到网上找了资料,学习下。 逻辑查询处理步骤 ...
一. 简答题(每小题5分,共60分) 1. SQL包括哪三个子语言? 数据定义子语言,数据操作子语言,数据控制子语言。 2. SQL的使用方式?...执行顺序:from->where->group by->having->->select->oeder by。