目前,我在Oracle数据库10g中的GROUP语句与我的数据库有问题。
我在这个数据库中有四个表--广告、员工、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函数在这里是不允许的。
我四处搜索,基本上这个错误告诉我,我分组的方式是错误的,但我不知道为什么。此外,我只是想知道,是否正确的方式格式化上述代码?
任何帮助都是非常感谢的。
注意:只是关于下面的表格的更多信息
。
编辑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。我只是假设最后一组陈述会解决这个问题,但我不认为有必要。
发布于 2011-10-10 15:46:28
首先..。通常,当您在左侧join表中放入select条件时,就会有一个内部联接。根据您的要求:
2
我会这样做:
SELECT title, SumGradeGreaterThan2
FROM (SELECT camp.title, COUNT (*) AS StaffMembers,
SUM (CASE
WHEN stfogrde.grade > 2
THEN 1
ELSE 0
END) AS SumGradeGreaterThan2
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
GROUP BY camp.title)
WHERE StaffMembers > 3发布于 2011-10-10 15:03:55
不能在where子句中使用聚合函数。改变这一点:
WHERE COUNT(Camp2.Title) > 3)对此:
HAVING COUNT(Camp2.Title) > 3)发布于 2011-10-10 15:19:18
我觉得你需要:
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 --- the GROUP BY was missing
HAVING COUNT(Camp2.Title) > 3 --- HAVING, not WHERE
)
GROUP BY Camp.Title --- is this needed? (or was misplaced?)https://stackoverflow.com/questions/7714744
复制相似问题