В настоящее время у меня проблема с операторами GROUP BY в базе данных Oracle 10g с моей базой данных.
У меня есть четыре таблицы в этой базе данных - Advertisements, 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: групповая функция здесь не разрешена
Я искал вокруг, и в основном эта ошибка говорит мне, что способ, которым я группируюсь, неверен, но я понятия не имею, почему это так. Также мне было просто интересно, был ли правильный способ отформатировать код выше?
Любая помощь приветствуется.
ПРИМЕЧАНИЕ. Еще немного информации о таблицах ниже
- У рекламы в основном есть поля, касающиеся даты эфира и т. Д.
- Персонал записал свои личные данные.
- StaffGrade показывает, на каком уровне оплаты находится сотрудник.
- StaffOnAd показывает, какой сотрудник работает над какой рекламой
название объявления.
РЕДАКТИРОВАТЬ 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 баллов. Я просто предположил, что последнее утверждение по группам решит эту проблему, но я не думай, что это необходимо.