2013-07-25 106 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数据库btw。 – Lorenzo

+0

您是否将where子句更改为having子句? –

+0

@LaurentDeWilde。 。 。无论如何,我看到了什么问题。 's.CourseCode'需要一个聚合函数。相反,我切换到'c.CourseCode'并将它放在'by by'组中。 –