SQL Server汇总数据之聚合函数与分组group by(二)

2014-11-24 12:11:08 · 作者: · 浏览: 2
702
如果没有where 条件结果为
部门名称 有工资的员工总数 部门工资
管理部 1 702
技术部 2 5469
客户部 1 1878
销售部 1 2200
3、嵌套聚合
对聚合过的结果集,再进行聚合查询
如:根据每种类别在每年/每季度的销售情况,求每年每季度销售最好的类别的销售
情况信息。
1、先根据种类以及每年/季度进行分组,并调用相关的聚合函数
这样就得到了不同种类在每年/每季度的销售情况
2、对上一个结果集,根据每年/每季度进行分组,并计算每个分组中销售最好的。
SQL语句:
--根据每年每季度分组,求出销售最多的一个分组。这里没有包含类别信息,如果需要
添加,可以通过再联接一个查询实现(下面会介绍到)
Select Y,Q,Max(SQ.[SUM]) as MaxSum
from
(--求出每年每季度不同类型的产品销售情况
select Category ,Year(SalesDate) as Y, DatePart(q,SalesDate) as Q,sum(Amount) as [SUM]
from RowData group by Category,Year(SalesDate),DatePart(q,SalesDate)
) as SQ
group by Y,Q
order by Y,Q
4、包含详细描述
一般通过子查询来实现(并使用联接),使用group by 会导致分组的不同,如果有多
列与一列分组效果是不一样的。多列必须这些列值全部相同才会成为一个分组,这样如果只
是为了添加显示依据单列分组中的某些信息,会使原来的分组发生变换,就得不到应有的信
息。
5、筛选分组结果
SQL Select 语句的执行顺序
1、From子句使用数据源组装数据集
2、Where子句根据条件限制返回的行
3、Group By 子句组装数据子集
4、对每个分组执行聚合函数
5、having 子句筛选数据子集
6、计算表达式
7、Order By 子句对结果进行排序
SQL Server使用Having 子句来筛选分组
如:
--根据每年每季度分组,求出销售最多的一个分组。这里没有包含类别信息,如果需要
添加,可以通过再联接一个查询实现
Select Y,Q,Max(SQ.[SUM]) as MaxSum
from
(--求出每年每季度不同类型的产品销售情况
select Category ,Year(SalesDate) as Y, DatePart(q,SalesDate) as Q,sum(Amount)
as [SUM]
from RowData group by Category,Year(SalesDate),DatePart(q,SalesDate)
) as SQ
group by Y,Q
having avg(Amount)>25
order by Y,Q