基本语法:

GROUP BY [ALL] group_by_expression[,……n][WITH (CUBE|ROLLUP)]

参数说明:

ALL:用于指定包含所有组和结果集,甚至包含那些其中任何行都不满足Where子句指定的搜索条件的组和结果集;

group_by_expression:用于指定进行分组所依据的表达式,也称为组合列。

CUBE\ROLLUP:指定在结果集内不仅包含由Group by 提供的行,还包含汇总行。

常用用法:

例1、统计2008年产品编码为716到730的产品的销售量和销售额

USE AdventureWorks2008R2;
GO
SELECT ProductID,
 SUM(OrderQty) AS SubQty,SUM(LineTotal) AS SubTotal
FROM (
SELECT *
FROM Sales.SalesOrderDetail sod
WHERE  ProductID BETWEEN 716 AND 730
)Sale
WHERE ModifiedDate > CONVERT(DATETIME,'2008-1-1',120)
GROUP BY ProductID
ORDER BY ProductID

运行结果:

例2、Group by all 可以对数据表中所有的数据进行分组

USE AdventureWorks2008R2;
GO
SELECT ProductID,
 SUM(OrderQty) AS SubQty,SUM(LineTotal) AS SubTotal
FROM (
SELECT *
FROM Sales.SalesOrderDetail sod
WHERE  ProductID BETWEEN 716 AND 730
)Sale
WHERE ModifiedDate > CONVERT(DATETIME,'2008-1-1',120)
GROUP BY all ProductID
ORDER BY ProductID
运行结果:

例2和例1只是相差了“ALL”,但是在结果上却有所不同;

因为产品编码719,723,725,727,,729在select子句结果集Sale中存在数据,所以会出现在最后的结果集中。

但是因为这几个产品2008年没有销售记录所以其销售量和销售额为null。

例3、使用with cube 会对 Group by 所列出的所有分组字段进行汇总运算

USE AdventureWorks2008R2;
GO
SELECT ProductID,YEAR(Sale.ModifiedDate)S_Year,MONTH(Sale.ModifiedDate)S_Month,
 SUM(OrderQty) AS SubQty,SUM(LineTotal) AS SubTotal
FROM (
SELECT *
FROM Sales.SalesOrderDetail sod
WHERE  ProductID BETWEEN 716 AND 717
)Sale
WHERE ModifiedDate >= CONVERT(DATETIME,'2007-12-1',120)
AND ModifiedDate < CONVERT(DATETIME,'2008-3-1',120)
GROUP BY ProductID,YEAR(Sale.ModifiedDate),MONTH(Sale.ModifiedDate)
WITH cube
运行结果:

例4、使用with rollup 会对 Group by 所列出的分组字段从左往右(有时说从右往左)进行汇总运算

USE AdventureWorks2008R2;
GO
SELECT ProductID,YEAR(Sale.ModifiedDate)S_Year,MONTH(Sale.ModifiedDate)S_Month,
 SUM(OrderQty) AS SubQty,SUM(LineTotal) AS SubTotal
FROM (
SELECT *
FROM Sales.SalesOrderDetail sod
WHERE  ProductID BETWEEN 716 AND 717
)Sale
WHERE ModifiedDate >= CONVERT(DATETIME,'2007-12-1',120)
AND ModifiedDate < CONVERT(DATETIME,'2008-3-1',120)
GROUP BY ProductID,YEAR(Sale.ModifiedDate),MONTH(Sale.ModifiedDate)
WITH rollup
运行结果:

PS : Compute by 也有分组统计的作用,效果和Group by 略有不同,其语法如下:

[ COMPUTE     { { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }     ( expression ) } [ ,...n ]     [ BY expression [ ,...n ] ] ]

示例:

USE AdventureWorks2008R2;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID /*By后的分组字段必须出现在Order by 中*/
COMPUTE SUM(SubTotal), SUM(TotalDue) /*可多个Compute*/

运行结果(部分截图):

更多用法请查看微软msdn

随笔001:Group by 语法剪辑的更多相关文章

  1. Oracle中With As 、Group By 语法

    比如有下面三张表,用With as  .Group By语法解决几个问题; with as :  可以用来创建临时表,作为过度的表: group by:   按照某个字段来分类: 对应字段如下: Sa ...

  2. mysql5.7 group by语法 1055

    先来看如下语句,查询默认存在的引擎表 之前使用的MySQL版本为5.7以下,根据support进行分组执行语句如下 添加跟分组support无关的字段engine 没有任何问题 现在使用的版本是5.7 ...

  3. group by语法

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...

  4. metal2 里 programmable blending 和image block的区别 语法以及persistent thread group的语法

    programmable blending 刚接触这个概念的时候 挺激动的 因为能解决很多管线里面的问题 比如 切一次rt再切回来 为了做read write same rt 有了这个 就不用切啦 可 ...

  5. 随笔1:Markdown语法学习

    学习背景 日常工作学习的时候,总喜欢用有道在线笔记记录点东西,不过以往都没太在意笔记的整理和排版,代码或者图片什么的都是直接贴在笔记上,不美观不说,有些代码格式也不容易进行区分,格式也在复制的时候容易 ...

  6. C++的学习 (此博客将一直补充更新下去,C++语法方面的内容不开新随笔了, *【语法学习】)

    // #include <sstream> // stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,包含在上述头文件中 // 先谈它在字符串处理方面的应用 ...

  7. 附001.Nginx location语法规则

    一 location规则 1.1 location语法 基本语法: location [=|~|~*|^~]/uri/{...} 修饰符释义: 1 = #表示精确严格匹配,只有请求的url路径与后面的 ...

  8. Ext.Net 学习随笔 001 安装Ext.Net

    Ext.Net版本:4.1.0 Ext.Net官网:ext.net Ext.Net官方演示:mvc.ext.net Ext.Net MVC Example 下载:github.com/extnet/E ...

  9. ORM开发之解析lambda实现group查询(附测试例子)

    目的:以编程方式实现group查询,在开发ORM时,需要达到这样的效果 先看一个简单的group语句 select BarCode,ProductName,COUNT(BarCode) as tota ...

随机推荐

  1. mysql CASE WHEN的基础和多种用法

    CASE计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果. CASE 搜索函数计算一组布尔表达式以确定结果. 两 ...

  2. Android优化系列之ListView优化老生常谈

    本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么 ...

  3. Linux下的图形界面——X Window的安装

    X Window即X Windows图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机.其中软件编写使用广义的命令集,它创建了一个硬件抽 ...

  4. UVa 11111 Generalized Matrioshkas

    嵌套玩具, 要求外层玩具的尺寸比内层玩具尺寸的和要大. 每一个玩具由一个负数与相应的正数表示, 在这两数之间的部分即为此玩具内部的玩具. 要求判断一串输出的数字是否能组成一个合法的玩具. 一个合法的玩 ...

  5. maven常见问题归纳

    前言 Maven,发音是[`meivin],"专家"的意思.它是一个非常好的项目管理工具,非常早就进入了我的必备工具行列,可是这次为了把ABPM项目 全然迁移并应用maven,所以 ...

  6. 关于C++与Java中虚函数问题的读书笔记

    之前一直用C++编程,对虚函数还是一些较为肤浅的理解.可近期由于某些原因搞了下Java,发现有些知识点不熟,于是站在先驱巨人的肩上谈谈C++与Java中虚函数问题. Java中的虚函数 以下是段别人的 ...

  7. HDU 3410 &amp;&amp; POJ 3776 Passing the Message 单调队列

    题意: 给定n长的数组(下标从1-n)(n个人的身高,身高各不同样 问:对于第i个人,他能看到的左边最矮的人下标.(假设这个最矮的人被挡住了,则这个值为0) 还有右边最高的人下标,同理若被挡住了则这个 ...

  8. 关于学习netty的两个完整服务器客户端范例

    https://github.com/wangyi793797714/IMServer https://github.com/wangyi793797714/IMClient https://gith ...

  9. Nagios在Ubuntu server上的安装配置

    首先我参看的是Nagios的官方文档,Nagios – Installing Nagios Core From Source——The Industry Standard in IT Infrastr ...

  10. currentTarget 与 Target 的区别

    在一般情况下,target与currentTarget指向的是同一个对象.一般情况是指我们只对某一个独立的mc添加侦听器.如下: var mc:Sprite=new Sprite();addChild ...