我目前在Oracle数据库10g中使用我的数据库时遇到了GROUP BY语句问题。SQL - Oracle数据库10g组通过查询
我该数据库中有四个表 - 广告,员工,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:组功能在这里不允许使用
我搜索周围,基本上是错误告诉我,我的分组方式是错误的,但我不知道这是为什么。此外,我只是想知道是格式化上述代码的正确方法?
任何帮助表示赞赏。
注:关于表下方
- 广告只是一些更多的信息主要有关于空气日期等
- 工作人员记录了他们的个人资料领域。
- StaffGrade显示工作人员的付款等级。
- StaffOnAd显示了工作人员由 标题广告在什么广告作品。
EDIT 1:尝试了以下注释后:
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:不是一个单组基函数
编辑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.我只是假设最后一组通过声明可以解决此问题,但我不要认为它是必要的。
我很困惑这一点。我试过了,它返回没有找到数据。什么是gradeok,为什么在案件陈述后?还有总员工,这将是员工表正确吗? – George
在内部select中,您有两个计算列,totalstaff,用于计算与广告相关的总员工记数,以及gradeok(或任何您想称之为唯一的别名),这是案例列的别名并计算有多少员工的付款等级大于2.如果您可以测试它,请尝试仅运行内部选择。 – Aitor
我刚刚编辑了查询以尝试清除列的含义... – Aitor