Skip to content

Latest commit

 

History

History
85 lines (65 loc) · 4.16 KB

43.md

File metadata and controls

85 lines (65 loc) · 4.16 KB

solution

eng:

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 /* отсортировать по .. */

код для hackerrank:

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