Recently, we had access to a database that contained the scores of a programming competitions system.
The database contained several contests, each contest contained several challenges and any competitor could make multiple submissions.
We wanted to extract a couple of charts showing
- how many submissions we had per score and
- how many submissions we had per score while filtering out the best submission (max score) per contestant per challenge per contest
The following code will return the number of submissions per score per challenge per contest.
SELECT contest_id, challenge_id, TRUNCATE(score, 1), COUNT(*) FROM submissions GROUP BY contest_id, challenge_id, TRUNCATE(score, 1) ORDER BY contest_id, challenge_id, TRUNCATE(score, 1);
The next one will return the number of submissions per score per challenge per contest while filtering out the best submission (max score) per contestant per challenge per contest:
SELECT contest_id, challenge_id, TRUNCATE(max_score, 1), COUNT(*) FROM ( SELECT contest_id, challenge_id, competitor_id, MAX(score) AS max_score FROM submissions GROUP BY contest_id, challenge_id, competitor_id ) AS max_scores GROUP BY contest_id, challenge_id, TRUNCATE(max_score, 1) ORDER BY contest_id, challenge_id, TRUNCATE(max_score, 1);
This post is also available in: Αγγλικα