SQL запрос с наибольшим значением с галстуком - PullRequest
0 голосов
/ 27 марта 2020

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

SELECT s.dept_name, s.name, s.max
FROM (SELECT dept_name, name, MAX(tot_cred) as max 
      FROM university.student GROUP BY dept_name) as s,
     university.student as t
WHERE s.name = t.name;

Он дает ошибки, и я не знаю, как справляться со связями. Если я удалю часть имени в запросе, мне удастся получить самые высокие баллы в каждом отделении (без ie)

Стол ученика состоит из идентификатора, имени, отдела, общего кредита.

1 Ответ

0 голосов
/ 27 марта 2020

Использовать RANK() оконную функцию:

SELECT t.dept_name, t.name, t.tot_cred
FROM (
  SELECT dept_name, name, tot_cred, 
    RANK() OVER(PARTITION BY dept_name ORDER BY tot_cred DESC) rn
  FROM university.student 
) t
WHERE t.rn = 1

Это альтернатива, если вы не можете использовать оконные функции:

SELECT s.dept_name, s.name, s.tot_cred
FROM university.student s
INNER JOIN (
  SELECT dept_name, MAX(tot_cred) tot_cred
  FROM university.student
  GROUP BY dept_name
) t ON t.dept_name = s.dept_name AND s.tot_cred = t.tot_cred

или с NOT EXISTS:

SELECT s.dept_name, s.name, s.tot_cred 
FROM university.student s 
WHERE NOT EXISTS (
  SELECT 1 FROM university.student
  WHERE dept_name = s.dept_name AND tot_cred > s.tot_cred  
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...