In this HackerRank Interviews problem solution, 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 0.
Note: A specific contest can be used to screen candidates at more than one college, but each college only holds 1 screening contest.
Problem solution MS SQL.
/* Enter your query here. Please append a semicolon ";" at the end of the query and enter your query in a single line to avoid error. */ ;with cte as ( select challenge_id, sum(total_views) as sum_views, sum(total_unique_views) as sum_uq_views from view_stats group by challenge_id ) ,cte2 as ( select challenge_id, sum(total_submissions) as sum_submissions, sum(total_accepted_submissions) as sum_acc_submissions from submission_stats group by challenge_id ) ,cte4 as ( select cont.contest_id, cont.hacker_id, cont.name, sum(isnull(c2.sum_submissions,0)) sum_submissions, sum(isnull(c2.sum_acc_submissions,0)) as sum_accepted_submissions, sum(isnull(c.sum_views,0)) as sum_views, sum(isnull(c.sum_uq_views,0)) as sum_unique_views from contests cont inner join colleges coll on cont.contest_id = coll.contest_id left join challenges cha on coll.college_id = cha.college_id left join cte2 c2 on c2.challenge_id = cha.challenge_id left join cte c on c.challenge_id = cha.challenge_id group by cont.contest_id, cont.hacker_id, cont.name ) select contest_id, hacker_id, name, sum_submissions, sum_accepted_submissions, sum_views, sum_unique_views from cte4 where not (sum_submissions=0 and sum_accepted_submissions=0 and sum_views=0 and sum_unique_views=0) order by contest_id
Problem solution in Oracle.
select t1.contest_id, t1.hacker_id, t1.name, ss, sas, sv, suv from ( select C.contest_id, C.hacker_id, C.name, sum(total_views) sv, sum(total_unique_views) suv from Contests C inner join Colleges CL on C.contest_id=CL.contest_id inner join Challenges CH on CH.college_id=CL.college_id inner join View_Stats V on V.challenge_id=CH.challenge_id group by C.contest_id, C.hacker_id, C.name ) t1 inner join ( select C.contest_id, C.hacker_id, C.name, sum(total_submissions) ss, sum(total_accepted_submissions) sas from Contests C inner join Colleges CL on C.contest_id=CL.contest_id inner join Challenges CH on CH.college_id=CL.college_id inner join Submission_Stats S on S.challenge_id=CH.challenge_id group by C.contest_id, C.hacker_id, C.name ) t2 on t1.contest_id=t2.contest_id order by t1.contest_id ;
Problem solution in DB2.
/* Enter your query here and follow these instructions: 1. Please append a semicolon ";" at the end of the query and enter your query in a single line to avoid error. 2. The AS keyword causes errors, so follow this convention: "Select t.Field From table1 t" instead of "select t.Field From table1 AS t" 3. Type your code immediately after comment. Don't leave any blank line. */ SELECT ct.contest_id, ct.hacker_id, ct.name, SUM(a.tot_sub), SUM(a.tot_acc_sub), SUM(b.tot_views), SUM(b.tot_uni_views) FROM contests ct JOIN colleges co ON co.contest_id = ct.contest_id JOIN challenges ch ON ch.college_id = co.college_id LEFT JOIN (SELECT ss.challenge_id challenge_id, SUM(ss.total_submissions) tot_sub, SUM(ss.total_accepted_submissions) tot_acc_sub FROM submission_stats ss GROUP BY ss.challenge_id) a ON a.challenge_id = ch.challenge_id LEFT JOIN (SELECT vs.challenge_id challenge_id, SUM(vs.total_views) tot_views, SUM(vs.total_unique_views) tot_uni_views FROM view_stats vs GROUP BY vs.challenge_id) b ON b.challenge_id = ch.challenge_id GROUP BY ct.contest_id, ct.Hacker_id, ct.name HAVING (SUM(a.tot_sub) + SUM(a.tot_acc_sub) + SUM(b.tot_views) + SUM(b.tot_uni_views) ) != 0 ORDER BY ct.contest_id;
0 Comments