HackerRank MySQL - 15 Days of Learning SQL
Julia conducted a 15 days of learning SQL contest. The start date of the contest was March 01, 2016 and the end date was March 15, 2016.
Write a query to print total number of unique hackers who made at least 1 submission each day (starting on the first day of the contest), and find the hacker_id and name of the hacker who made maximum number of submissions each day. If more than one such hacker has a maximum number of submissions, print the lowest hacker_id. The query should print this information for each day of the contest, sorted by the date.
- SELECT t1.submission_date, hkr_cnt, t2.hacker_id, name
- FROM (SELECT p1.submission_date,
- COUNT(DISTINCT p1.hacker_id) AS hkr_cnt
- FROM (SELECT submission_date, hacker_id,
- @h_rnk := CASE WHEN @h_grp != hacker_id THEN 1 ELSE @h_rnk+1 END AS hacker_rank,
- @h_grp := hacker_id AS hacker_group
- FROM (SELECT DISTINCT submission_date, hacker_id
- FROM submissions
- ORDER BY hacker_id, submission_date) AS a,
- (SELECT @h_rnk := 1, @h_grp := 0) AS r) AS p1
- JOIN (SELECT submission_date,
- @d_rnk := @d_rnk + 1 AS date_rank
- FROM (SELECT DISTINCT submission_date
- FROM submissions
- ORDER BY submission_date) AS b,
- (SELECT @d_rnk := 0) r) AS p2
- ON p1.submission_date = p2.submission_date
- AND hacker_rank = date_rank
- GROUP BY p1.submission_Date) AS t1
- JOIN (SELECT submission_date, hacker_id, sub_cnt,
- @s_rnk := CASE WHEN @d_grp != submission_date THEN 1 ELSE @s_rnk+1 END AS max_rnk,
- @d_grp := submission_date AS date_group
- FROM (SELECT submission_date, hacker_id, COUNT(*) AS sub_cnt
- FROM submissions AS s
- GROUP BY submission_date, hacker_id
- ORDER BY submission_date, sub_cnt DESC, hacker_id) AS c,
- (SELECT @s_rnk := 1, @d_grp := 0) AS r) AS t2
- ON t1.submission_date = t2.submission_date AND max_rnk = 1
- JOIN hackers AS h ON h.hacker_id = t2.hacker_id
- ORDER BY t1.submission_date
- ;