2013-10-03 2 views
-1

Можно ли исправить этот запрос? Я просто не знаю, как заставить его работать.Подзапрос агрегатных функций

SELECT ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark,Max(SumOFMarks),Min(SumOFMarks) 
FROM 
(
SELECT ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark,sum(StudentMark)SumOFMarks 
FROM Users 
INNER JOIN UserExams ON Users.UserID = UserExams.UserID 
INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID 
WHERE ClassCourses.ClassID=1 
group by ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark    
)AS T 
+1

В будущем это действительно помогает, если вы также публикуете определения таблиц и сообщение об ошибке, которое вы видите. –

ответ

3

Попробуйте это:

SELECT T.ClassID, 
    T.CourseID, 
    T.MaxMark, 
    Max(SumOFMarks), 
    Min(SumOFMarks) 
FROM 
(
    SELECT ClassCourses.ClassID, 
     ClassCourses.CourseID, 
     ClassCourses.MaxMark, 
     sum(StudentMark) SumOFMarks 
    FROM Users 
    INNER JOIN UserExams ON Users.UserID = UserExams.UserID 
    INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
    INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID 
    WHERE ClassCourses.ClassID=1 
    group by ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark    
)AS T 
GROUP BY T.ClassID, 
    T.CourseID, 
    T.MaxMark 

Внешняя ЗЕЬЕСТ отсутствует положение о GROUP BY - я добавил его. Посмотрите на последние 3 строки.

+1

ClassCourses - это псевдоним таблицы внутреннего запроса. –

+0

yep только что заметили –

1

Просто GROUP BY в конце и исправить псевдонимы таблиц:

SELECT T.ClassID, 
     T.CourseID, 
     T.MaxMark, 
     MAX(T.SumOFMarks), 
     MIN(T.SumOFMarks) 
FROM 
(
SELECT ClassCourses.ClassID, 
     ClassCourses.CourseID, 
     ClassCourses.MaxMark, 
     SUM(StudentMark) SumOFMarks 
FROM Users 
INNER JOIN UserExams ON Users.UserID = UserExams.UserID 
INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID 
WHERE ClassCourses.ClassID = 1 
GROUP BY ClassCourses.ClassID, 
     ClassCourses.CourseID, 
     ClassCourses.MaxMark    
)AS T 
GROUP BY ClassID,CourseID,MaxMark 
+0

+1 для первого. –

0

Ваш псевдоним был неправ во внешнем запросе. Я удалил ClassCourses и добавил T вместо этого.

SELECT T.ClassID,T.CourseID,T.MaxMark,Max(T.SumOFMarks),Min(T.SumOFMarks) 
FROM 
(
SELECT  
ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark,sum(StudentMark)SumOFMarks 
FROM Users 
INNER JOIN 
    UserExams 
    ON Users.UserID = UserExams.UserID 
INNER JOIN Exams 
    ON UserExams.ExamID = Exams.ExamID 
INNER JOIN ClassCourses 
    ON Exams.ClassID = ClassCourses.ClassID 
    AND Exams.CourseID = ClassCourses.CourseID 
WHERE ClassCourses.ClassID=1 
group by ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark    
)AS T 
GROUP BY T.ClassID,T.CourseID,T.MaxMark; 
+0

Пропустить финальную группу. –

+0

добавил предложение group by. – Teja

0

Вы можете использовать CTE так:

WITH CteUsers (ClassID, CourseID, MaxMark, SumOFMarks) 
AS (
    SELECT ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark,sum(StudentMark)SumOFMarks 
    FROM Users 
    INNER JOIN UserExams ON Users.UserID = UserExams.UserID 
    INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
    INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID 
    WHERE ClassCourses.ClassID=1 
    group by ClassCourses.ClassID,ClassCourses.CourseID,ClassCourses.MaxMark    
) 
SELECT ClassID,CourseID,MaxMark,Max(SumOFMarks),Min(SumOFMarks) 
FROM CteUsers 
GROUP BY ClassID,CourseID,MaxMark 
3

Даже после Исправления альясинга & Group By на внешний запрос, FYI Max (T.SumOfMarks) и Min (T.SumOfMarks) будет производить такое же значение.

+0

Вы правы. Возможно, пример того, как решить эту проблему, может принять ваш ответ! –

+0

Duh, конечно. Не могу поверить, что мы все пропустили это :) –

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