昨天写作业的时候遇见了一个问题
就是如果需要输出的内容有聚集函数并且有text类型变量时要怎么办
因为text类型变量无法进行GROUP BY语句操作,或者是聚集函数操作
于是就会报错
对此 我找出了两种实现方法,但不得不说,有些麻烦
所以在声明变量类型的时候还是建议大家尽量不要用text类型,用char即可
三个表如下:
Employee表:
Department表:
Salary表:
题目是这样的
需要查询所有部门详细信息和部门人数:
因为我们需要按照DepartmentID进行分组然后再COUNT得到人数
但是Note的类型text使我们无法在一个SELECT中同时实现这两个目标
所以一种方案是先创建视图,令视图中存在有已经被分过组的并且总和过的数据
然后再与Department表进行连接操作
得到题目答案:
CREATE VIEW Temp
AS
SELECT COUNT(Department.DepartmentID)AS 'DepartmentID',COUNT(Employee.DepartmentID)AS'总数'
FROM Department,Employee
WHERE Department.DepartmentID=Employee.DepartmentID
GROUP BY Employee.DepartmentID;
SELECT Note,总数
FROM Temp,Department
WHERE Department.DepartmentID=temp.DepartmentID
这里需要注意一下:
CREATE语句是不能与其他的语句同时出现的
所以要把建立视图和第二个SELECT操作分开写
然后另外一种方案是依靠SELECT的返回值是表类型这一点进行操作
即将视图作为表进行操作,直接写入到第二个SELECT的FROM中
得到题目答案:
SELECT Note,总数
FROM Department,
(SELECT Department.DepartmentID,COUNT(Employee.DepartmentID)AS'总数'
FROM Department,Employee
WHERE Department.DepartmentID=Employee.DepartmentID
GROUP BY Employee.DepartmentID,Department.DepartmentID AS Temp)
WHERE Department.DepartmentID = Temp.DepartmentID
总结:
大家建表的时候尽量还是不要用text类型给自己添麻烦了。。。