Как использовать group by при использовании нескольких встроенных функций в SQL - PullRequest
0 голосов
/ 14 мая 2018

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

Мой запрос

SELECT 
COUNT(COUNT(COURSE.COURSE_NO)) AS "Number of courses", 
MAX(SUM(COURSE.CREDITS)) AS "Total Credits"
FROM 
STUDENT
JOIN ENROLLMENT 
ON ENROLLMENT.S_ID = STUDENT.S_ID
JOIN COURSE_SECTION
ON COURSE_SECTION.C_SEC_ID = ENROLLMENT.C_SEC_ID
JOIN COURSE
ON COURSE.COURSE_NO = COURSE_SECTION.COURSE_NO
GROUP BY STUDENT.S_ID;

и результат:

Number of courses Total Credits
----------------- -------------
            6            21

который принадлежит конкретному студенту.

Как отобразить идентификатор студента вместе с результатом? Когда я помещаю STUDENT.S_ID в предложение SELECT, он выдает ошибку «не одна групповая функция».

1 Ответ

0 голосов
/ 14 мая 2018

Я верю, что вы хотите:

SELECT e.*
FROM (SELECT e.S_ID
             COUNT(*) as num_courses,
             SUM(c.CREDITS) AS total_credits,
             RANK() OVER (ORDER BY SUM(c.CREDITS)) as seqnum
      FROM ENROLLMENT e JOIN
           COURSE_SECTION cs
           ON cs.C_SEC_ID = e.C_SEC_ID JOIN
           COURSE c
           ON c.COURSE_NO = cs.COURSE_NO
      GROUP BY e.S_ID
     ) e
WHERE seqnum = 1;

Возвращает всех студентов с максимальным количеством кредитов. В конце концов, таких учеников может быть несколько.

Другие примечания:

  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • Таблица STUDENTS не нужна, поскольку идентификатор студента находится в ENROLLMENT.
  • Используйте простые псевдонимы столбцов, так что вам не нужно экранировать имена.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...