You did such a great job helping Julia with her last coding contest challenge that she wants you to work on this one, too!
The total score of a hacker is the sum of their maximum scores for all of the challenges. Write a query to print the hacker_id, name, and total score of the hackers ordered by the descending score. If more than one hacker achieved the same total score, then sort the result by ascending hacker_id. Exclude all hackers with a total score of from your result.
Input Format
The following tables contain contest data:
Hackers: The hacker_id is the id of the hacker, and name is the name of the hacker.
Submissions: The submission_id is the id of the submission, hacker_id is the id of the hacker who made the submission, challenge_id is the id of the challenge for which the submission belongs to, and score is the score of the submission.
Вы проделали такую большую работу, помогая Джулии с ее последним соревнованием по программированию, что она хочет, чтобы вы тоже поработали над этим!
Общий балл хакера — это сумма его максимальных баллов за все испытания. Напишите запрос для вывода hacker_id, имени и общей оценки хакеров в порядке убывания. Если несколько хакеров набрали одинаковый общий балл, отсортируйте результат по возрастанию hacker_id. Исключите всех хакеров с общим счетом из вашего результата.
Формат ввода
В следующих таблицах содержатся данные о соревнованиях:
Хакеры: hacker_id — это идентификатор хакера, а name — это имя хакера.
Заявки: submit_id — это идентификатор отправки, hacker_id — это идентификатор хакера, сделавшего отправку, challenge_id — это идентификатор задачи, к которой относится отправка, а score — это оценка отправки.
SELECT /* выбрать данные */
h.hacker_id, /* столбец */
h.name, /* столбец */
sum(s.max_score) as total_score /* столбец */
FROM Hackers h /* из таблицы */
JOIN ( /* объединить */
SELECT /* выбрать данные */
hacker_id, /* столбец */
challenge_id, /* столбец */
MAX(score) as max_score /* столбец с псевдонимом */
FROM Submissions /* из таблицы */
GROUP BY 1,2) s /* сгруппировать по 1-му и 2-му столбцу */
ON h.hacker_id = s.hacker_id /* по номеру хакера */
GROUP BY 1,2 /* сгруппировать по 1-му и 2-му столбцу */
HAVING sum(s.max_score) > 0 /* где сумма больше нулая */
ORDER BY sum(s.max_score) DESC, h.hacker_id ASC /* отсортировать по .. */
SELECT
h.hacker_id,
h.name,
sum(s.max_score) as total_score
FROM Hackers h
JOIN (
SELECT
hacker_id,
challenge_id,
MAX(score) as max_score
FROM Submissions
GROUP BY 1,2) s
ON h.hacker_id = s.hacker_id
GROUP BY 1,2
HAVING sum(s.max_score) > 0
ORDER BY sum(s.max_score) DESC, h.hacker_id ASC