Запрос общего балла
Таблица ввода: представления
Представление содержит четыре столбца, 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