Transact SQL Finding Max Регистрация в каждой группе - PullRequest
0 голосов
/ 11 марта 2012

Доброе утро всем.

У меня есть структура таблицы (я использую SQL SERVER 2000)

CourseID Имя студента TermPaperID

101         Jon            1   
101         Jon            2
101         Jon            3
101         David          1   
101         David          2
102         David          5 
102         David          6 
102         George         5  

Я хотел бы перечислить CourseID, StudentName, Максимальная регистрация на курс.

Я пробовал следующий запрос

select 
CourseId,
StudentName,
max(x.numberofregistration) as max_registration
from
(
   select 
           CourseID,
           StudentName,
           count(CourseID) as numberofregistration 
    from 
    dbo.Students 
            group by CourseId,StudentName
 )x
 group by CourseId,StudentName

, но он не дал ожидаемого результата.

Ожидаемый результат: у меня есть структура таблицы

CourseID Имя студента max_registration

101         Jon            3   
102         David          2

Как достичь ожидаемого результата?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Вот очень, очень уродливый способ.Я думаю, что я бы лучше понизил плату за обновление, чем написал бы слишком много из них.Надеюсь, кто-то еще придумает что-нибудь почище.

CREATE TABLE #x(CourseID INT, StudentName VARCHAR(32), TermPaperID INT);

INSERT #x SELECT 101,'Jon   ',1;   
INSERT #x SELECT 101,'Jon   ',2;
INSERT #x SELECT 101,'Jon   ',3;
INSERT #x SELECT 101,'David ',1;   
INSERT #x SELECT 101,'David ',2;
INSERT #x SELECT 102,'David ',5; 
INSERT #x SELECT 102,'David ',6; 
INSERT #x SELECT 102,'George',5;

SELECT b.CourseID, b.StudentName, max_registration = COUNT(*)
FROM #x AS b
INNER JOIN (
  SELECT CourseID, c = MAX(c)
  FROM
  (
    SELECT CourseID, StudentName, c = COUNT(CourseID) 
    FROM #x GROUP BY CourseID, StudentName
  ) AS x GROUP BY CourseID
) AS s
ON b.CourseID = s.CourseID
GROUP BY b.CourseID, b.StudentName
HAVING COUNT(*) = MAX(s.c)
ORDER BY b.CourseID;
0 голосов
/ 12 марта 2012

Похоже, что ваш CTE 'x' группируется по тому же значению, что и подсчитываемое вами.Простой подсчет другого поля (т. Е. Идентификатора курсовой работы) должен дать ожидаемые результаты.

При этом в выбранной вами выборке результатов я не понимаю, почему эти результаты ожидаются от данных выборки.Если я неправильно понял вопрос, я буду рад попробовать еще раз!: -)

...