Group by 与 Over (Partition by) 都可以实现分组统计功能.
Group by 根据一列或者多列的值或表达式将选定的行进行一个摘要分组,每一个分组都返回一行.
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM Sales.SalesOrderDetail AS sod where SalesOrderID in (43659,43660) GROUP BY SalesOrderID ORDER BY SalesOrderID;
查询结果:

使用表达式以及Having 语句的Group by:
SELECT DATEPART(yyyy,OrderDate) AS 'Year' ,SUM(TotalDue) AS 'Total Order Amount' FROM Sales.SalesOrderHeader GROUP BY DATEPART(yyyy,OrderDate) HAVING DATEPART(yyyy,OrderDate) >= '2003' ORDER BY DATEPART(yyyy,OrderDate);

Group by 通常与聚合函数一起使用. Group By 语句后面的item或者表达式必须在select语句中出现,否则就会出现语法错误。
2. Over (Partition By) 语句 也可以实现分组统计的功能,但是它并不会对统计的结果进行分组.针对每一条记录,它都会返回分组统计的结果。
SELECT DATEPART(yyyy,OrderDate) AS N'Year',SalesOrderID ,SUM(TotalDue) OVER (PARTITION by DATEPART(yyyy,OrderDate)) AS N'Total Order Amount' FROM Sales.SalesOrderHeader ORDER BY DATEPART(yyyy,OrderDate);

所以,在需要显示每一列的记录以及同时显示一些聚合的信息时,应该使用Over partition by 语句.
浙公网安备 33010602011771号