2013-07-25 41 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'組中。 –