|
3 | 3 | <img src="./art/56.png" alt="solution" >
|
4 | 4 |
|
5 | 5 | #### eng:
|
| 6 | +Julia conducted a days of learning SQL contest. The start date of the contest was March 01, 2016 and the end date was March 15, 2016. |
6 | 7 |
|
| 8 | +Write a query to print total number of unique hackers who made at least submission each day (starting on the first |
| 9 | +day of the contest), and find the hacker_id and name of the hacker who made maximum number of submissions each day. |
| 10 | +If more than one such hacker has a maximum number of submissions, print the lowest hacker_id. The query should print |
| 11 | +this information for each day of the contest, sorted by the date. |
7 | 12 |
|
8 | 13 |
|
9 | 14 | #### рус:
|
| 15 | +Юлия провела конкурс дней обучения SQL. Дата начала конкурса 01.03.2016, дата окончания 15.03.2016. |
10 | 16 |
|
| 17 | +Напишите запрос для вывода общего количества уникальных хакеров, которые делали как минимум сабмиты каждый день |
| 18 | +(начиная с первого дня конкурса), и найдите hacker_id и имя хакера, который сделал максимальное количество сабмитов |
| 19 | +каждый день. Если более одного такого хакера имеют максимальное количество представлений, выведите наименьший |
| 20 | +hacker_id. Запрос должен вывести эту информацию для каждого дня конкурса, отсортированного по дате. |
11 | 21 |
|
12 | 22 |
|
13 | 23 | #### код с коментариями:
|
14 | 24 | ```sql
|
15 |
| - |
| 25 | +SELECT |
| 26 | + b.submission_date, COALESCE(a.contSub,0), b.id, c.name |
| 27 | +FROM ( |
| 28 | + SELECT o.submission_date, MIN(o.hacker_id) AS id |
| 29 | + FROM ( |
| 30 | + SELECT n.submission_date, n.hacker_id,COUNT(n.submission_id) |
| 31 | + FROM Submissions n |
| 32 | + GROUP BY submission_date, hacker_id |
| 33 | + HAVING COUNT(submission_id)>= ALL( |
| 34 | + SELECT COUNT(m.submission_id) |
| 35 | + FROM Submissions m |
| 36 | + GROUP BY m.submission_date, m.hacker_id |
| 37 | + HAVING m.submission_date=n.submission_date |
| 38 | + ) |
| 39 | + ) AS o |
| 40 | + GROUP BY submission_date |
| 41 | + ) AS b |
| 42 | +LEFT JOIN ( |
| 43 | + SELECT aa.submission_date, COUNT(DISTINCT aa.hacker_id) AS contSub |
| 44 | + FROM Submissions AS aa |
| 45 | + WHERE aa.submission_date='2016-03-01' |
| 46 | + OR submission_date<ALL( |
| 47 | + SELECT bb.submission_date |
| 48 | + FROM ( |
| 49 | + SELECT tdy.hacker_id, tdy.submission_date, ytd.submission_date AS SubmittedYtd |
| 50 | + FROM Submissions tdy LEFT JOIN Submissions ytd |
| 51 | + ON DATE_ADD(tdy.submission_date, INTERVAL -1 DAY)= ytd.submission_date |
| 52 | + AND ytd.hacker_id=tdy.hacker_id |
| 53 | + ) AS bb |
| 54 | + WHERE aa.hacker_id=bb.hacker_id AND bb.submission_date<> STR_TO_DATE('2016-03-01', '%Y-%m-%d') AND bb.SubmittedYtd IS NULL |
| 55 | + ) |
| 56 | + GROUP BY aa.submission_date |
| 57 | +) AS a |
| 58 | +ON a.submission_date=b.submission_date |
| 59 | +JOIN Hackers c ON b.id=c.hacker_id |
| 60 | +ORDER BY a.submission_date ASC |
16 | 61 | ```
|
17 | 62 |
|
18 | 63 | #### код для hackerrank:
|
19 | 64 | ```sql
|
20 |
| - |
| 65 | +SELECT |
| 66 | + b.submission_date, COALESCE(a.contSub,0), b.id, c.name |
| 67 | +FROM ( |
| 68 | + SELECT o.submission_date, MIN(o.hacker_id) AS id |
| 69 | + FROM ( |
| 70 | + SELECT n.submission_date, n.hacker_id,COUNT(n.submission_id) |
| 71 | + FROM Submissions n |
| 72 | + GROUP BY submission_date, hacker_id |
| 73 | + HAVING COUNT(submission_id)>= ALL( |
| 74 | + SELECT COUNT(m.submission_id) |
| 75 | + FROM Submissions m |
| 76 | + GROUP BY m.submission_date, m.hacker_id |
| 77 | + HAVING m.submission_date=n.submission_date |
| 78 | + ) |
| 79 | + ) AS o |
| 80 | + GROUP BY submission_date |
| 81 | + ) AS b |
| 82 | +LEFT JOIN ( |
| 83 | + SELECT aa.submission_date, COUNT(DISTINCT aa.hacker_id) AS contSub |
| 84 | + FROM Submissions AS aa |
| 85 | + WHERE aa.submission_date='2016-03-01' |
| 86 | + OR submission_date<ALL( |
| 87 | + SELECT bb.submission_date |
| 88 | + FROM ( |
| 89 | + SELECT tdy.hacker_id, tdy.submission_date, ytd.submission_date AS SubmittedYtd |
| 90 | + FROM Submissions tdy LEFT JOIN Submissions ytd |
| 91 | + ON DATE_ADD(tdy.submission_date, INTERVAL -1 DAY)= ytd.submission_date |
| 92 | + AND ytd.hacker_id=tdy.hacker_id |
| 93 | + ) AS bb |
| 94 | + WHERE aa.hacker_id=bb.hacker_id AND bb.submission_date<> STR_TO_DATE('2016-03-01', '%Y-%m-%d') AND bb.SubmittedYtd IS NULL |
| 95 | + ) |
| 96 | + GROUP BY aa.submission_date |
| 97 | +) AS a |
| 98 | +ON a.submission_date=b.submission_date |
| 99 | +JOIN Hackers c ON b.id=c.hacker_id |
| 100 | +ORDER BY a.submission_date ASC |
21 | 101 | ```
|
22 | 102 |
|
23 | 103 |
|
|
0 commit comments