# πŸ“Š HW 7 DB HSE ## by Anna Sibirtseva BSE206 **07.11.2022** ### ⭐ Task 1 - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипт для автоматичСского наполнСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… НС Π·Π½Π°Π»Π°, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π°Ρ‚ΡŒ, поэтому ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ½ΡƒΠ»Π° всё Π² Π³ΡƒΠ³Π» ΠΊΠΎΠ»Π°Π±: https://colab.research.google.com/drive/1ZdiCVeXZRIoXLtVBedemcdridfO04YBw?usp=sharing ### ⭐ Task 2 - Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ задания с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SQL πŸ”Έ task 3.1 Для ΠžΠ»ΠΈΠΌΠΏΠΈΠΉΡΠΊΠΈΡ… ΠΈΠ³Ρ€ 2004 Π³ΠΎΠ΄Π° сгСнСрируйтС список (Π³ΠΎΠ΄ роТдСния, количСство ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², количСство Π·ΠΎΠ»ΠΎΡ‚Ρ‹Ρ… ΠΌΠ΅Π΄Π°Π»Π΅ΠΉ), содСрТащий Π³ΠΎΠ΄Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠΈ, количСство ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Ρ€ΠΎΠ΄ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π»Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½Ρƒ Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль, ΠΈ количСство Π·ΠΎΠ»ΠΎΡ‚Ρ‹Ρ… ΠΌΠ΅Π΄Π°Π»Π΅ΠΉ, Π·Π°Π²ΠΎΠ΅Π²Π°Π½Π½Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌΠΈ, Ρ€ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠΌΠΈΡΡ Π² этом Π³ΠΎΠ΄Ρƒ. ```sql SELECT extract(year FROM birthdate) AS birthday, COUNT(medal), COUNT(DISTINCT players.player_id) FROM players, results, events WHERE players.player_id = results.player_id AND medal='GOLD' AND events.event_id = results.event_id AND events.olympic_id = 'ATH2004' GROUP BY extract(year FROM birthdate) ``` πŸ”Έ task 3.2 ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ всС ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ (Π½Π΅ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅) сорСвнования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»Π° Π½ΠΈΡ‡ΡŒΡ Π² счСтС, ΠΈ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль. ```sql SELECT name, olympic_id FROM events WHERE is_team_event = 0 AND event_id IN(SELECT event_id FROM results WHERE medal LIKE "%GOLD%" GROUP BY event_id HAVING COUNT(medal) > 1) ``` πŸ”Έ task 3.3 НайдитС всСх ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ мСдаль (GOLD, SILVER ΠΈ BRONZE) Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ОлимпиадС. (player-name, olympic-id). ```sql (SELECT player.name, olympic_id FROM events, results, players WHERE players.player_id = results.player_id AND events.event_id = results.event_id AND medal LIKE %GOLD%) INTERSECT (SELECT player.name, olympic_id FROM events, results, players WHERE players.player_id = results.player_id AND events.event_id = results.event_id AND medal LIKE %SILVER%) INTERSECT (SELECT player.name, olympic_id FROM events, results, players WHERE players.player_id = results.player_id AND events.event_id = results.event_id AND medal LIKE %BRONZE%) ``` πŸ”Έ task 3.4 Π’ ΠΊΠ°ΠΊΠΎΠΉ странС Π±Ρ‹Π» наибольший ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² (ΠΈΠ· пСрСчислСнных Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…), Ρ‡ΡŒΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈΡΡŒ с гласной? ```sql WITH temp AS (SELECT c1.country_id, CAST(c2.num_players AS FLOAT) / c1.num_players AS ratio FROM ( SELECT country_id, COUNT(player_id) AS num_players FROM players GROUP BY country_id) c1, (SELECT country_id, COUNT(player_id) AS num_players FROM players WHERE substr(name, 1, 1) IN ('A', 'E', 'O', 'I', 'U') GROUP BY country_id) c2 WHERE c1.country_id = c2.country_id) SELECT c.name FROM temp t, countries c WHERE ratio = (SELECT MAX(ratio) from temp) AND t.country_id = c.country_id ``` πŸ”Έ task 3.5 Для ΠžΠ»ΠΈΠΌΠΏΠΈΠΉΡΠΊΠΈΡ… ΠΈΠ³Ρ€ 2000 Π³ΠΎΠ΄Π° Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ 5 стран с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ количСства Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Π΄Π°Π»Π΅ΠΉ ΠΊ числСнности насСлСния. ```sql WITH temp AS (SELECT c.name, COUNT(*) / CAST(c.population AS FLOAT) AS ratio FROM TeamMedals im, events e, countries c WHERE e,event_id = im.event_id AND e.olympic_id = 'SYD2000' AND im.country_id = c.country_id GROUP BY c.name, c.population) SELECT name FROM temp t1 WHERE (SELECT COUNT(*) FROM temp t2 WHERE t2 < t1.ratio) > 5 ```