SQL Server数据汇总五招轻松搞定数据汇总五招轻松搞定
本文我们将讨论如何使用GROUPBY子句来汇总数据。
使用单独列分组使用单独列分组
GROUP BY子句通过设置分组条件来汇总数据,在第一个例子中,我在数据库AdventureWork2012中的表
Sales.SalesOrderDetail.中的一列上进行数据分组操作。这个例子以及其他例子都使用数据库AdventureWorks2012,如果你
想使用它运行我的代码,你可以点击下载。
下面是第一个示例的源码,在CarrierTrackingNumber列上使用group by子句进行数据分组操作
USE AdventureWorks2012;
GO
SELECT CarrierTrackingNumber
,SUM(LineTotal) AS SummarizedLineTotal
FROM AdventureWorks2012.Sales.SalesOrderDetail
GROUP BY CarrierTrackingNumber;
在我运行这段代码后,会得到3807个记录,下面是这个庞大的结果集中前五个数值:
CarrierTrackingNumber LineTotal
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
6E46-440A-B5 2133.170700
B501-448E-96 4085.409800
8551-4CDF-A1 72616.524200
B65C-4867-86 714.704300
99CE-4ADA-B1 16185.429200
在上面的示例中,我使用group by子句选择哪些列作为聚集dventureWorks2012.Sales.SalesOrderDetai数据表数据的条件,
在例子中,我使用CarrierTrackingNumber汇总数据,当你进行数据分组时,只有在group By 子句中出现的列才在selection 列
表中有效。在我的示例中,我使用聚集函数SUM计算LineTotal,为了使用方便,我为它设置了别名SummarizedLineTotal。
如果我想获得CarrierTrackingNumber 满足特定条件下的聚集集合,那我可以在Where子句中对查询进行限制,就像我下面做
的这样:
USE AdventureWorks2012;
GO
SELECT CarrierTrackingNumber
,SUM(LineTotal) AS SummarizedLineTotal
FROM AdventureWorks2012.Sales.SalesOrderDetail
WHERE CarrierTrackingNumber = '48F2-4141-9A'
GROUP BY CarrierTrackingNumber;
这里我在原始查询基础上在where子句中加上了一条限制,我设置了我的查询只返回CarrierTrackingNumber 等于一个特定值
的结果。运行这段代码后,我会得到记录中CarrierTrackingNumber 等于48F2-4141-9A的行的数量。Where子句的过滤行为
在数据被聚集之前就已生效。
通过多列来分组通过多列来分组
有时候你可能需要使用多列来进行数据分组,下面是我使用多列进行分组的示例代码