GROUP BY 子句用于聚合信息

先看个实例,没有使用 GROUP BY 子句

SELECT SalesOrderID,OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43660,43670)

结果: 结果可以得知,有很多重复的列(SalesOrderID)

为什么会出现这种结果了?

查看一下表结构可知,这张表 的主键是个组合主键, 分别有 SalesOrderID 和 SalesOrderDetailID 组成,当我们在 select中只选择SalesOrderID 时,所以会出现上图的结果

再来看使用了 GROUP BY 子句的结果:

SELECT SalesOrderID,OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43660,43670)
GROUP BY SalesOrderID

此时会报错: 显示 OrderQty 列没有包含在 聚合函数 或 GROUP BY 子句中

说明: 当我们在使用 group by 子句的时候,  select 中选取的列 要么要包含在 group by 子句中,要么要包含在 聚合函数中

  

此时我们修改代码:

SELECT SalesOrderID,OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43660,43670)
GROUP BY SalesOrderID,OrderQty

结果: 这个实例包含了 group by 子句,但是没有 聚合函数

  

再来看看包含聚合函数的实例,通常有四个聚合函数

  1. SUM()
  2. MAX()
  3. MIN()
  4. COUNT()

在看一下:

SELECT SalesOrderID,SUM(OrderQty) AS TotalOrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43660,43670)
GROUP BY SalesOrderID

结果: 这个才算真正的分组了, 把每个 SalesOrderID 对应的  总OrderQty 显示出来了

  


先说说 GROUP BY 子句的作用:

它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。

通过一个实例说明:

假设数据库中有张表结果如下:

由表中可分析出:

  1. ManagerID 为 1 的经理 有 3 名员工,其EmployeeID 分别为  2,3,4
  2. ManagerID 为 4 的经理 有 3 名员工,其EmployeeID 分别为  5,6,7
  3. ManagerID 为 5 的经理 有 4 名员工,其EmployeeID 分别为  8,9,10,11
  4. 员工号 EmployeeID  为 1 的员工 对应的 经理 ManagerID 为 NULL,    这点说明这名员工没有与之对应的经理, 可能是公司的总裁之类。

然后使用SQL 进行分析:

SELECT ManagerID, COUNT(*)  --选出每个ManagerID,并且该MangerID所对应的数据条数
FROM HumanResources.Employee2
GROUP BY ManagerID --以 ManagerID 分组

结果如下:

说明:  ManagerID 为1  有3条数据与之对应

     ManagerID 为4  有3条数据与之对应

       ManagerID为5   有4条数据与之对应

     其中ManagerID 为NULL 的有一条数据与之对应,  假设为 总裁

  • 添加HAVING 子句

HAVING 与 Where 语句类似,Where 是在分类之前过滤,而 HAVING 是在分类之后过滤。

如果想对以上返回结果,进行相应条件的搜索,则可以添加HAVING子句,假设这里需要返回 ManagerID 对应数据量 大于  3 的结果,则SQL如下:

SELECT  COUNT(*) AS Reposrts
FROM HumanResources.Employee2
GROUP BY ManagerID
HAVING COUNT(*) > 3

结果:

SQL Server 基础 之 GROUP BY子句的更多相关文章

  1. Sql Server 基础语法

    来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select  ...

  2. SQL server基础知识(表操作、数据约束、多表链接查询)

    SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...

  3. 【SQL Server】SQL Server基础之存储过程

    SQL Server基础之存储过程  阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...

  4. SQL Server 2012 中 Update FROM子句

    首先说明一下需求以及环境 创建Table1以及Table2两张表,并插入一下数据 USE AdventureWorks2012; GO IF OBJECT_ID ('dbo.Table1', 'U') ...

  5. 《SQL Server基础——SQL语句》

    SQL Server基础--SQL语句       一.创建和删除数据库: 1.创建数据库(默认化初始值) 格式: CREATE DATABASE 数据库名称 例如: CREATE DATABASE ...

  6. 数据库开发基础-SQl Server 基础

    SQL Server 基础 1.什么是SQL Server SQL:Structured Query Language  结构化查询语言 SQL Server是一个以客户/服务器(c/s)模式访问.使 ...

  7. Sql Server 基础知识

    Sql Server 基础知识: http://blog.csdn.net/t6786780/article/details/4525652 Sql Server 语句大全: http://www.c ...

  8. SQL Server基础之索引

     索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,数据库能快速到达一个位置 ...

  9. 【SQL server】SQL server基础(二)

    一.一些重要的SQL命令 SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据 CREAT ...

随机推荐

  1. hdu 4255 A Famous Grid

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...

  2. VisualSVN Server添加svn项目

    如果你想把一个项目添加到svn的步骤: 第一步:打开VisualSVN Server,在目录Repositries目录下,创建一个文件夹名称: 第二步:要把导入的项目,指定到这个路径:如下图:

  3. 安装MSITVPN连接的时候弹出:需要(未知)上的文件'MSITVPN.bmp。

    使用 msitvpn 连接microsoft 公司内网,在安装msitvpn的时候突然弹出一个对话框提示需要msitvpn.bmp 文件,找了很久都没找到解决问题方案. 最后只能猜测是不是和用户的权限 ...

  4. 二、verilogHDL行为描述建模

    1.综合器: 能把行为级的verilog模块自动转换为门级结构的工具叫做综合器(synthsis tool) 2.verilog网表(verilog netlist): 电路结构可以用门级verilo ...

  5. OC-通讯录

    要求描述:用OC语言完成简易通讯录(实现增删改查)功能.(注:使用MRC) 1.创建AddressBook类. 1)使用字典作为容器,字典的Key值为分组名(姓名首字母),value值为数组,数组中存 ...

  6. 【BZOJ 1997】[Hnoi2010]Planar

    Description Input Output   找到哈密尔顿环之后找到不在哈密尔顿环上的边 这些边如果同时在里面相交那他们同时在外面也相交,所以只能一外一内,这就变成了2-SAT,判一下就好了 ...

  7. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  8. Z_blog博客尝试 http://www.uuxin.com/

    原来的博客由于没有备份所有数据全部丢失,很是郁闷. 又用Z-BLOG新建了一个博客.http://www.uuxin.com

  9. 四则运算出题器(C++)-BUG修复

    定制题目数量这个功能测试: (1)输入题目数为负数时: 可正确处理: (2)输入题目数量为0时: 可正确处理: (3)输入题目数量为小数时: 程序运行出错: 错误分析: 因为代码中题目数量的变量Que ...

  10. 连接db2数据库时NumberFormatException异常的解决方式

    连接db2数据库时报异常:java.lang.NumberFormatException: For input string: "A" from a DB2 JDBC(JCC) j ...