sql server——分组查询(方法和思想)
思想
先排序在汇总
sql server里分组查询通常用于配合聚合函数,达到分类汇总统计的信息。而其分类汇总的本质实际上就是先将信息排序,排序后相同类别的信息会聚在一起,然后通过需求进行统计计算。
使用GROUP BY进行分组查询
实例演示
--查询男女生的人数
在没有学习分组查询之前,我们可以安装常规的思路解决查询需求:
select count(*) from student where sex='男'
select count(*) from student where sex='女'
那么现在又要个需要时,查询每个班级的总人数
如果按照常规解决查询,那么我们应该思考的是:
1.每个班级,我们并不知道在表里有哪些班级,那么我们where 后的条件如何写?
2.如果该表里有1000个班级,那么我难道要写一千条where查询语句?
面对这样的问题 sql server为我们准备了Group by 关键字实现分组查询
在使用介绍Group by关键字之前,我们先来看看系统实现分组查询的原理和逻辑:

映射成SQL语句:
select sex ,count(*) as 人数 from student group by sex
这个简短的语句,经过上图的原理,应该要知道,第一步是先from查询表的所有信息,然后group by根据字段进行分组后在统计汇总
上面的案例是通过Count()函数进行统计,当然分组汇总还可以使用其他的聚合函数进行汇总。
使用GROUP BY 语句注意事项一:

图中使用查询语句,包含一个字段和一个聚合函数为什么会报错呢?
原因,我们把两个字段分开来查询:

总结:为了保证完整性,系统约定俗成,在使用了聚合函数的查询语句中,除了聚合函数,可以在查询列表上,要出现其他字段,那么该字段就必须为分组字段,而且该字段一定要跟随在GROUP BY关键字后面。
与聚合函数一起出现在select后面进行查询的列,只有两种可能性:被聚合 、被分组
多列分组查询
--实例需求,查询每一个班级,男女生的人数
分析:显然需求是两组,每一个班需要划分组,男女也需要分组
实现图解:

SQL语句:
select GradeId,sex,COUNT(*) from student group by GradeId,Sex order by GradeId
经验:搞清楚需要分几组,搞清楚分组的顺序,一轮一轮的分,系统是等分组之后才会进行汇总信息
使用HAVING子句
演示示例:--查询每一个班级男女生的人数,同时只需要显示人数数量超过3人的记录
分析:此查询显然是对上一个示例的多列分组进行筛选。
试在这学的知识范围内来解决此查询需求。。。。
一、那么就按照我们学的where来进行筛选
结果如图:

这个错误告诉了我们:where里面不能出现聚合函数作为条件,失败!
二、既然不能使用聚合函数,那就给聚合函数取一个别名,让它当做一个列
结果如图:

错误原因:原因是where是对源数据进行筛选的,也就是对from 后面的表进行筛选,既然是源数据,那么where去源数据表里找一个别名字段,怎么可能会有!所以才会报错
让我们来探讨一下,这里为什么不能使用where
1.需求是对分组之后的数据集进行筛选,where只针对数据表原始数据筛选
2.where关键字显然只能出现一次,而且根据查询的顺序,是先执行where条件筛选后得到的结果集,在进行的group by分组
解决办法,使用HAVING关键字:
HAVING核心:是对分组统计之后的结果集,进行数据的筛选
SQL语句:
select GradeId,sex,COUNT(*) as renshu from student group by GradeId,Sex having count(*)>=3 order by GradeId
where和having的不同:where是对原始数据进行筛选,having是对分组时候的数据进行筛选
查询语句的执行顺序
在这里引出查询机制里对查询语句里的关键字的执行顺序
查询关键字家族成员
select top/distinct 字段列表 from 表列表 where 筛选条件 group by 分组字段列表 having 对分组之后得到的结果集筛选 order by 排序字段列表
执行顺序:
1.from
2.where
3.group by
4.having
5.根据select 关键之后的要显示的字段,进行结果集显示
6.order by 对最终结果集进行排序
7.top/dictinct
sql server——分组查询(方法和思想)的更多相关文章
- CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏
CASE函数 作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
- SQL Server分页查询方法整理
SQL Server数据库分页查询一直是SQL Server的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页 ...
- sql server 分组查询结合日期模糊查询
分组查询: https://www.cnblogs.com/netserver/p/4518995.html 日期格式化格式: http://blog.csdn.net/qq_16769857/art ...
- SQL Server分组查询某最大值的整条数据(包含linq写法)
想实现如下效果,就是分组后时间最大的那一条数据: 1.SQL SELECT * FROM ( SELECT * , ROW_NUMBER() OVER ( PARTITION BY RIP_GUID ...
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- SQL Server优化的方法
SQL Server优化的方法<一> 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了 ...
随机推荐
- Oracle 客户端管理软件安装
1.首先,先说明下为什么要安装Oracle客户端管理工具? 因为Oracle服务端过大,而且消耗的资源过多,大部分公司会把服务端装在公司的服务器上,而不会装在员工的电脑上,所以这个时候就需要使用Ora ...
- window下,nodejs 安装 http-server,开启命令行HTTP服务器
第一步:http://nodejs.cn/ 官网下载安装文件,安装nodejs: 第二步:运行中输入cmd进入命令行模式,输入 node -v ,显示版本号,代表安装成功: 第三步:在node命令 ...
- 转:JVM系列三:JVM参数设置、分析
转自:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断 ...
- 【debian】解决debian中文安装后出现乱码的问题
由于安装debian选择语言时选择了简体中文安装,但内核没有中文字库,导致某些字符显示为乱码(菱形,方块). 解决办法: 普通用户如果没有设置sudo权限,首先切换到root权限.然后: apt-ge ...
- ubuntu 64上的GCC如何编译32位程序
运行命令 gcc -v 显示: Target: x86_64-linux-gnu 所以,我这里的gcc默认生成64位的程序. 如果想编出32位的程序,就要加 -m32选项.可是我尝试了,还是不行. 原 ...
- fetch将替代ajax?
原谅我做一次标题党,Ajax 不会死,传统 Ajax 指的是 XMLHttpRequest(XHR),未来现在已被 Fetch 替代. 最近把阿里一个千万级 PV 的数据产品全部由 jQuery 的 ...
- Scrapy框架学习(三)Spider、Downloader Middleware、Spider Middleware、Item Pipeline的用法
Spider有以下属性: Spider属性 name 爬虫名称,定义Spider名字的字符串,必须是唯一的.常见的命名方法是以爬取网站的域名来命名,比如爬取baidu.com,那就将Spider的名字 ...
- webapi 权限控制解决方案
随着移动互联网的发展,webapi的应用越来越广泛,本文是笔者总结的webapi的认证校验案例,欢迎指出 案例分为两个功能: 1.用户登录,传入账号和密码到api服务器,然后服务器使用FormsAut ...
- yii1的笔记
$sql = 'SELECT * FROM to8to_worker_item limit 10'; $res = Yii::app()->db->createCommand($sql)- ...
- 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)
本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...