2013-07-25 2 views
0

У меня возникла проблема с подзапросом SQL: мне нужно написать запрос, который возвращает курсы, в которых количество подписок (count (employeeNumber)) больше максимально допустимого количества подписей (максимум).Функция групповой подсекции SQL не разрешена

В моем первоначальном запросе я получаю следующую ошибку: Функция группы здесь не допускается.

Запрос:

SELECT c.CourseName 
FROM courses c 
INNER JOIN subscriptions s ON s.courseCode = c.CourseCode 
INNER JOIN plannedCourses p ON p.CourseCode = s.CourseCode 
WHERE COUNT(s.EmployeeNumber) > (SELECT maximum 
           FROM plannedCourses 
           WHERE s.CourseCode = p.CourseCode); 

Макет таблицы:

Table layout

Как я достичь результата желание?

Спасибо заранее!

ответ

0

Вы можете переписать запрос следующим образом:

select c.coursename 
    from courses c 
    join subscriptions s 
    on (s.coursecode = c.coursecode) 
    join PlannedCourses p 
    on (p.coursecode = c.coursecode) 
    group by c.coursename 
     , p.maximum 
    having count(s.Employeenumber) > p.maximum 
+0

ОК, это сработало! Спасибо друг! – Lorenzo

0

У вашего запроса есть несколько проблем. Вы используете коррелированный подзапрос, но вы не используете таблицу в своем предложении from. Я думаю, что намерение заключается в следующем:

SELECT c.CourseName 
FROM courses c 
INNER JOIN subscriptions s ON s.courseCode = c.CourseCode 
group by c.CourseName, c.CourseCode 
having COUNT(s.EmployeeNumber) > (SELECT "maximum" 
            FROM plannedCourses p 
            WHERE c.CourseCode = p.CourseCode); 
+0

я получаю следующее сообщение об ошибке: «Не GROUP BY выражение» ... Но, может быть, мой весь запрос неправильно ... Я работаю с базой данных Oracle. – Lorenzo

+0

Вы изменили предложение 'where' на предложение' having'? –

+0

@ LaurentDeWilde. , , В любом случае, я вижу, в чем проблема. Для 's.CourseCode' нужна функция агрегации. Вместо этого я переключился на 'c.CourseCode' и поместил его в' group by'. –

 Смежные вопросы

  • Нет связанных вопросов^_^