SQL-带有text的数据需要排序的问题

昨天写作业的时候遇见了一个问题

就是如果需要输出的内容有聚集函数并且有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类型给自己添麻烦了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值