由partition看窗口函数2011-04-10 博客园 郑浩宇最近要完成一个项目,有一个查询可难住了笔者,无论是子查询还是分组,都没弄出来, 还是基础知识不行啊。不过呢,可以查资料,最后用一个窗口函数解决了问题。由于开始的 数据库是Access,后来笔者导成SQL Server的,一下子明白了很多。数据库类似是这个样子滴:Employee表的字段:empId,englishName,depId
Department表的字段:depId,deptName
需求是:查找出Department表的所有字段,但是在前面显示出该部门的人数。就是这样:peopleCount depId deptName
25 1 人力资源部
42 2 市场营销部
一、分组的失败首先说说分组的概念。根据关系数据库理论,分组的概念是(G,·,e ),其中G 是聚集,·是二目运算,e是G的一个成员,SELECT和GROUP BY的关系如下:(一)当使用聚集函数(例如count),对于SELECT 列表中的项,如果没有把它当做聚集 函数的参数使用,必须是分组的一部分,例如有一个SQL语句:SELECT depId
,count(*) as peopleCount
FROM Employee
那就必须在GROUP BY中出现deptId:SELECT depId
,count(*) as peopleCount
FROM Employee
GROUP BY depId
但是窗口函数是例外的,不必(也不能)出现在Group BY子句中。而对于可能更改分组(或者聚集函数返回值,例如新的列),则一定要包含在GROUP BY子 句之中。否则就会报错。