【发布时间】:2011-10-10 15:01:51
【问题描述】:
我目前在使用我的数据库的 Oracle 数据库 10g 中的 GROUP BY 语句时遇到问题。
我在这个数据库中有四个表——Advertising、Staff、StaffGrade 和 StaffOnAd。我要查询的是超过三名工作人员的广告,我想列出该广告标题以及付款等级大于 2 的工作人员数量。
以下是我的尝试:
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2 AND Camp.Title IN (SELECT Camp2.Title FROM Campaign Camp2
LEFT JOIN WorksOn Wo2 ON Camp2.Title = Wo2.Title
WHERE COUNT(Camp2.Title) > 3)
GROUP BY Camp.Title
我收到的错误是:ORA-00934: group function is not allowed here
我四处搜索,基本上那个错误告诉我我分组的方式是错误的,但我不知道为什么会这样。另外我只是想知道格式化上述代码的正确方法是什么?
感谢任何帮助。
注意:关于下表的更多信息
- 广告基本上都有关于播出日期等的字段。
- 记录了员工的个人详细信息。
- StaffGrade 显示员工的付款等级。
- StaffOnAd 显示哪些工作人员在哪个广告上工作 广告标题。
编辑 1:在 cmets 之后尝试了以下操作:
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2 AND Camp.Title IN (SELECT Camp2.Title FROM Campaign Camp2
LEFT JOIN WorksOn Wo2 ON Camp2.Title = Wo2.Title
HAVING COUNT(Camp2.Title) > 3)
GROUP BY Camp.Title
但是,我收到一个新错误:ORA-00937: not a single-group group function
编辑 2:
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2
AND Camp.Title IN
( SELECT Camp2.Title
FROM Campaign Camp2
LEFT JOIN WorksOn Wo2
ON Camp2.Title = Wo2.Title
GROUP BY Camp2.Title
HAVING COUNT(Camp2.Title) > 3
)
GROUP BY Camp.Title
这个修改后的查询没有错误。但是,唯一显示的结果是广告的标题,我还需要在该广告上工作的员工数量大于 2。我只是假设最后一个 group by 语句可以解决这个问题,但我觉得没必要。
【问题讨论】: