Samantha interviews many candidates from different colleges using coding challenges and contests. Write a query to print the contest_id, hacker_id, name, and the sums of total_submissions, total_accepted_submissions, total_views, and total_unique_views for each contest sorted by contest_id. Exclude the contest from the result if all four sums are .
Note: A specific contest can be used to screen candidates at more than one college, but each college only holds screening contest.
Input Format
The following tables hold interview data:
- Contests: The contest_id is the id of the contest, hacker_id is the id of the hacker who created the contest, and name is the name of the hacker.
- Colleges: The college_id is the id of the college, and contest_id is the id of the contest that Samantha used to screen the candidates.
- Challenges: The challenge_id is the id of the challenge that belongs to one of the contests whose contest_id Samantha forgot, and college_id is the id of the college where the challenge was given to candidates.
- View_Stats: The challenge_id is the id of the challenge, total_views is the number of times the challenge was viewed by candidates, and total_unique_views is the number of times the challenge was viewed by unique candidates.
- Submission_Stats: The challenge_id is the id of the challenge, total_submissions is the number of submissions for the challenge, and total_accepted_submission is the number of submissions that achieved full scores.
Sample Input
Contests Table:
Colleges Table:
Challenges Table:
View_Stats Table:
Submission_Stats Table:
Sample Output
66406 17973 Rose 111 39 156 56
66556 79153 Angela 0 0 11 10
94828 80275 Frank 150 38 41 15
Explanation
The contest is used in the college . In this college , challenges and are asked, so from the view and submission stats:
- Sum of total submissions
- Sum of total accepted submissions
- Sum of total views
- Sum of total unique views
My Answer
SELECT contests.contest_id,
contests.hacker_id,
contests.name,
Sum(ss.submissions) AS t_sub,
Sum(ss.accepted_submissions) AS t_accepted_sub,
Sum(vs.views) AS t_views,
Sum(vs.unique_views) AS t_unique_views
FROM contests
LEFT JOIN colleges
ON contests.contest_id = colleges.contest_id
LEFT JOIN challenges
ON colleges.college_id = challenges.college_id
LEFT JOIN (SELECT challenge_id,
Sum(total_views) AS views,
Sum(total_unique_views) AS unique_views
FROM view_stats
GROUP BY challenge_id) AS vs
ON challenges.challenge_id = vs.challenge_id
LEFT JOIN (SELECT challenge_id,
Sum(total_submissions) AS submissions,
Sum(total_accepted_submissions) AS
accepted_submissions
FROM submission_stats
GROUP BY challenge_id) AS ss
ON challenges.challenge_id = ss.challenge_id
GROUP BY contests.contest_id,
contests.hacker_id,
contests.name
HAVING ( t_sub + t_accepted_sub + t_views + t_unique_views ) > 0
ORDER BY contests.contest_id;
Chú ý điều kiện join
ReplyDeleteON challenges.challenge_id = vs.challenge_id
và
ON challenges.challenge_id = ss.challenge_id
-----------
Chứ không phải là
ON challenges.challenge_id = vs.challenge_id
và
ON vs.challenge_id = ss.challenge_id