Запрос общего балла

Таблица ввода: представления

Представление содержит четыре столбца, Contestant_id указывает идентификатор разных участников, которые подали против разных проблем. Один участник может подать против проблемы более одного раза. Таким образом, challenge_id может появляться более одного раза против Contestant_id.

 submission_id  Contestant_id challenge_id    score
    11                 1             333        90
    22                 2             333        60
    33                 3             333        80
    44                 4             333         0
    112                1             333        45
    113                1             444        80
    114                2             444        70

Таблица вывода: Общая оценка

Contestant_id     score 
    1              170
    2              130
    3               80 

Здесь мы берем общий балл как

 for contestant_id 1 :  total score = max(90,45)+ 80 = 170
 for contestant_id 2 :  total score = 60 + 70 = 130
 for contestant_id 3 :  total score = 80 
 for contestant_id 4 :  total score = 0 ;so we exclude it 

для получения общего балла я должен взять максимум одного contestant_id, если есть более одного идентификатора challenge_id, чем взять сумму. Но я застрял в этом, как это сделать.

Выберите Contestant_id,Score as (Выбрать сумму (макс. (Выбрать....)

2 ответа

Решение

Кажется, вам нужны два уровня агрегации. Вам нужен максимальный балл для каждого участника и задачи. Тогда вы хотите добавить это.

Вот один из методов:

select Contestant_id, sum(max_score)
from (select Contestant_id, challenge_id, max(score) as max_score
      from Submissions
      group by Contestant_id, challenge_id,
     ) t
group by Contestant_id;

Если вы хотите создать выходную таблицу, вы можете добавить into total_scores после select,

Использование CTE

WITH q AS
(
SELECT contestant_id, challenge_id, MAX(score) as score
FROM submissions
GROUP BY contestant_id, challenge_id
)

SELECT contestant_id, SUM(score)
FROM q
GROUP BY contestant_id
HAVING SUM(score) > 0
Другие вопросы по тегам