├── assets ├── facespace_dau.png ├── facespace_mau.png └── datacamp.svg ├── data ├── actor.csv └── user_metadata.csv ├── README.md └── notebooks ├── data_analysis_in_sql.ipynb └── data_analysis_in_sql_solution.ipynb /assets/facespace_dau.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datacamp/data-analysis-in-sql-live-training/master/assets/facespace_dau.png -------------------------------------------------------------------------------- /assets/facespace_mau.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datacamp/data-analysis-in-sql-live-training/master/assets/facespace_mau.png -------------------------------------------------------------------------------- /data/actor.csv: -------------------------------------------------------------------------------- 1 | actor_id,first_name,last_name,last_update 2 | 1,Penelope,Guiness,2/15/06 10:05 3 | 2,Nick,Wahlberg,2/15/06 10:05 4 | 3,Ed,Chase,2/15/06 10:05 5 | 4,Jennifer,Davis,2/15/06 10:05 6 | 5,Johnny,Lollobrigida,2/15/06 10:05 7 | 6,Bette,Nicholson,2/15/06 10:05 8 | 7,Grace,Mostel,2/15/06 10:05 9 | 8,Matthew,Johansson,2/15/06 10:05 10 | 9,Joe,Swank,2/15/06 10:05 11 | 10,Christian,Gable,2/15/06 10:05 12 | 11,Zero,Cage,2/15/06 10:05 13 | 12,Karl,Berry,2/15/06 10:05 14 | 13,Uma,Wood,2/15/06 10:05 15 | 14,Vivien,Bergen,2/15/06 10:05 16 | 15,Cuba,Olivier,2/15/06 10:05 17 | 16,Fred,Costner,2/15/06 10:05 18 | 17,Helen,Voight,2/15/06 10:05 19 | 18,Dan,Torn,2/15/06 10:05 20 | 19,Bob,Fawcett,2/15/06 10:05 21 | 20,Lucille,Tracy,2/15/06 10:05 22 | 21,Kirsten,Paltrow,2/15/06 10:05 23 | 22,Elvis,Marx,2/15/06 10:05 24 | 23,Sandra,Kilmer,2/15/06 10:05 25 | 24,Cameron,Streep,2/15/06 10:05 26 | 25,Kevin,Bloom,2/15/06 10:05 27 | 26,Rip,Crawford,2/15/06 10:05 28 | 27,Julia,Mcqueen,2/15/06 10:05 29 | 28,Woody,Hoffman,2/15/06 10:05 30 | 29,Alec,Wayne,2/15/06 10:05 31 | 30,Sandra,Peck,2/15/06 10:05 32 | 31,Sissy,Sobieski,2/15/06 10:05 33 | 32,Tim,Hackman,2/15/06 10:05 34 | 33,Milla,Peck,2/15/06 10:05 35 | 34,Audrey,Olivier,2/15/06 10:05 36 | 35,Judy,Dean,2/15/06 10:05 37 | 36,Burt,Dukakis,2/15/06 10:05 38 | 37,Val,Bolger,2/15/06 10:05 39 | 38,Tom,Mckellen,2/15/06 10:05 40 | 39,Goldie,Brody,2/15/06 10:05 41 | 40,Johnny,Cage,2/15/06 10:05 42 | 41,Jodie,Degeneres,2/15/06 10:05 43 | 42,Tom,Miranda,2/15/06 10:05 44 | 43,Kirk,Jovovich,2/15/06 10:05 45 | 44,Nick,Stallone,2/15/06 10:05 46 | 45,Reese,Kilmer,2/15/06 10:05 47 | 46,Parker,Goldberg,2/15/06 10:05 48 | 47,Julia,Barrymore,2/15/06 10:05 49 | 48,Frances,Day-Lewis,2/15/06 10:05 50 | 49,Anne,Cronyn,2/15/06 10:05 51 | 50,Natalie,Hopkins,2/15/06 10:05 52 | 51,Gary,Phoenix,2/15/06 10:05 53 | 52,Carmen,Hunt,2/15/06 10:05 54 | 53,Mena,Temple,2/15/06 10:05 55 | 54,Penelope,Pinkett,2/15/06 10:05 56 | 55,Fay,Kilmer,2/15/06 10:05 57 | 56,Dan,Harris,2/15/06 10:05 58 | 57,Jude,Cruise,2/15/06 10:05 59 | 58,Christian,Akroyd,2/15/06 10:05 60 | 59,Dustin,Tautou,2/15/06 10:05 61 | 60,Henry,Berry,2/15/06 10:05 62 | 61,Christian,Neeson,2/15/06 10:05 63 | 62,Jayne,Neeson,2/15/06 10:05 64 | 63,Cameron,Wray,2/15/06 10:05 65 | 64,Ray,Johansson,2/15/06 10:05 66 | 65,Angela,Hudson,2/15/06 10:05 67 | 66,Mary,Tandy,2/15/06 10:05 68 | 67,Jessica,Bailey,2/15/06 10:05 69 | 68,Rip,Winslet,2/15/06 10:05 70 | 69,Kenneth,Paltrow,2/15/06 10:05 71 | 70,Michelle,Mcconaughey,2/15/06 10:05 72 | 71,Adam,Grant,2/15/06 10:05 73 | 72,Sean,Williams,2/15/06 10:05 74 | 73,Gary,Penn,2/15/06 10:05 75 | 74,Milla,Keitel,2/15/06 10:05 76 | 75,Burt,Posey,2/15/06 10:05 77 | 76,Angelina,Astaire,2/15/06 10:05 78 | 77,Cary,Mcconaughey,2/15/06 10:05 79 | 78,Groucho,Sinatra,2/15/06 10:05 80 | 79,Mae,Hoffman,2/15/06 10:05 81 | 80,Ralph,Cruz,2/15/06 10:05 82 | 81,Scarlett,Damon,2/15/06 10:05 83 | 82,Woody,Jolie,2/15/06 10:05 84 | 83,Ben,Willis,2/15/06 10:05 85 | 84,James,Pitt,2/15/06 10:05 86 | 85,Minnie,Zellweger,2/15/06 10:05 87 | 143,River,Dean,2/15/06 10:05 88 | 86,Greg,Chaplin,2/15/06 10:05 89 | 87,Spencer,Peck,2/15/06 10:05 90 | 88,Kenneth,Pesci,2/15/06 10:05 91 | 89,Charlize,Dench,2/15/06 10:05 92 | 90,Sean,Guiness,2/15/06 10:05 93 | 91,Christopher,Berry,2/15/06 10:05 94 | 92,Kirsten,Akroyd,2/15/06 10:05 95 | 93,Ellen,Presley,2/15/06 10:05 96 | 94,Kenneth,Torn,2/15/06 10:05 97 | 95,Daryl,Wahlberg,2/15/06 10:05 98 | 96,Gene,Willis,2/15/06 10:05 99 | 97,Meg,Hawke,2/15/06 10:05 100 | 98,Chris,Bridges,2/15/06 10:05 101 | 99,Jim,Mostel,2/15/06 10:05 102 | 100,Spencer,Depp,2/15/06 10:05 103 | 101,Laura,VerHulst,2/15/06 10:05 104 | 102,Walter,Torn,2/15/06 10:05 105 | 103,Matthew,Leigh,2/15/06 10:05 106 | 104,Penelope,Cronyn,2/15/06 10:05 107 | 105,Sidney,Crowe,2/15/06 10:05 108 | 106,Groucho,Dunst,2/15/06 10:05 109 | 107,Gina,Degeneres,2/15/06 10:05 110 | 108,Warren,Nolte,2/15/06 10:05 111 | 109,Sylvester,Dern,2/15/06 10:05 112 | 110,Laura,VerHulst,2/15/06 10:05 113 | 111,Cameron,Zellweger,2/15/06 10:05 114 | 112,Russell,Bacall,2/15/06 10:05 115 | 113,Morgan,Hopkins,2/15/06 10:05 116 | 114,Morgan,Mcdormand,2/15/06 10:05 117 | 115,Harrison,Bale,2/15/06 10:05 118 | 116,Dan,Streep,2/15/06 10:05 119 | 117,Renee,Tracy,2/15/06 10:05 120 | 118,Cuba,Allen,2/15/06 10:05 121 | 119,Warren,Jackman,2/15/06 10:05 122 | 120,Penelope,Monroe,2/15/06 10:05 123 | 121,Liza,Bergman,2/15/06 10:05 124 | 122,Salma,Nolte,2/15/06 10:05 125 | 123,Julianne,Dench,2/15/06 10:05 126 | 124,Scarlett,Bening,2/15/06 10:05 127 | 125,Albert,Nolte,2/15/06 10:05 128 | 126,Frances,Tomei,2/15/06 10:05 129 | 127,Kevin,Garland,2/15/06 10:05 130 | 128,Cate,Mcqueen,2/15/06 10:05 131 | 129,Daryl,Crawford,2/15/06 10:05 132 | 130,Greta,Keitel,2/15/06 10:05 133 | 131,Jane,Jackman,2/15/06 10:05 134 | 132,Adam,Hopper,2/15/06 10:05 135 | 133,Richard,Penn,2/15/06 10:05 136 | 134,Gene,Hopkins,2/15/06 10:05 137 | 135,Rita,Reynolds,2/15/06 10:05 138 | 136,Ed,Mansfield,2/15/06 10:05 139 | 137,Morgan,Williams,2/15/06 10:05 140 | 138,Lucille,Dee,2/15/06 10:05 141 | 139,Ewan,Gooding,2/15/06 10:05 142 | 140,Whoopi,Hurt,2/15/06 10:05 143 | 141,Cate,Harris,2/15/06 10:05 144 | 142,Jada,Ryder,2/15/06 10:05 145 | 144,Angela,Witherspoon,2/15/06 10:05 146 | 145,Kim,Allen,2/15/06 10:05 147 | 146,Albert,Johansson,2/15/06 10:05 148 | 147,Fay,Winslet,2/15/06 10:05 149 | 148,Emily,Dee,2/15/06 10:05 150 | 149,Russell,Temple,2/15/06 10:05 151 | 150,Jayne,Nolte,2/15/06 10:05 152 | 151,Geoffrey,Heston,2/15/06 10:05 153 | 152,Ben,Harris,2/15/06 10:05 154 | 153,Minnie,Kilmer,2/15/06 10:05 155 | 154,Meryl,Gibson,2/15/06 10:05 156 | 155,Ian,Tandy,2/15/06 10:05 157 | 156,Fay,Wood,2/15/06 10:05 158 | 157,Greta,Malden,2/15/06 10:05 159 | 158,Vivien,Basinger,2/15/06 10:05 160 | 159,Laura,Brody,2/15/06 10:05 161 | 160,Chris,Depp,2/15/06 10:05 162 | 161,Harvey,Hope,2/15/06 10:05 163 | 162,Oprah,Kilmer,2/15/06 10:05 164 | 163,Christopher,West,2/15/06 10:05 165 | 164,Humphrey,Willis,2/15/06 10:05 166 | 165,Al,Garland,2/15/06 10:05 167 | 166,Nick,Degeneres,2/15/06 10:05 168 | 167,Laurence,Bullock,2/15/06 10:05 169 | 168,Will,Wilson,2/15/06 10:05 170 | 169,Kenneth,Hoffman,2/15/06 10:05 171 | 170,Mena,Hopper,2/15/06 10:05 172 | 171,Olympia,Pfeiffer,2/15/06 10:05 173 | 172,Groucho,Williams,2/15/06 10:05 174 | 173,Alan,Dreyfuss,2/15/06 10:05 175 | 174,Michael,Bening,2/15/06 10:05 176 | 175,William,Hackman,2/15/06 10:05 177 | 176,Jon,Chase,2/15/06 10:05 178 | 177,Gene,Mckellen,2/15/06 10:05 179 | 178,Lisa,Monroe,2/15/06 10:05 180 | 179,Ed,Guiness,2/15/06 10:05 181 | 180,Jeff,Silverstone,2/15/06 10:05 182 | 181,Matthew,Carrey,2/15/06 10:05 183 | 182,Debbie,Akroyd,2/15/06 10:05 184 | 183,Russell,Close,2/15/06 10:05 185 | 184,Humphrey,Garland,2/15/06 10:05 186 | 185,Michael,Bolger,2/15/06 10:05 187 | 186,Julia,Zellweger,2/15/06 10:05 188 | 187,Renee,Ball,2/15/06 10:05 189 | 188,Rock,Dukakis,2/15/06 10:05 190 | 189,Cuba,Birch,2/15/06 10:05 191 | 190,Audrey,Bailey,2/15/06 10:05 192 | 191,Gregory,Gooding,2/15/06 10:05 193 | 192,John,Suvari,2/15/06 10:05 194 | 193,Burt,Temple,2/15/06 10:05 195 | 194,Meryl,Allen,2/15/06 10:05 196 | 195,Jayne,Silverstone,2/15/06 10:05 197 | 196,Bela,Walken,2/15/06 10:05 198 | 197,Reese,West,2/15/06 10:05 199 | 198,Mary,Keitel,2/15/06 10:05 200 | 199,Julia,Fawcett,2/15/06 10:05 201 | 200,Thora,Temple,2/15/06 10:05 -------------------------------------------------------------------------------- /assets/datacamp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Data Analysis in SQL
by **Michel Semaan** 2 | 3 | Live training sessions are designed to mimic the flow of how a real data scientist would address a problem or a task. As such, a session needs to have some “narrative” where learners are achieving stated learning objectives in the form of a real-life data science task or project. For example, a data visualization live session could be around analyzing a dataset and creating a report with a specific business objective in mind _(ex: analyzing and visualizing churn)_, a data cleaning live session could be about preparing a dataset for analysis etc ... 4 | 5 | As part of the 'Live training Spec' process, you will need to complete the following tasks: 6 | 7 | Edit this README by filling in the information for steps 1 - 4. 8 | 9 | ## Step 1: Foundations 10 | 11 | This part of the 'Live training Spec' process is designed to help guide you through session design by having you think through several key questions. Please make sure to delete the examples provided here for you. 12 | 13 | ### A. What problem(s) will students learn how to solve? (minimum of 5 problems) 14 | 15 | - Organizing query results in CTEs. 16 | - Using joins to compare historical data. 17 | - Using window functions to fetch values from other rows. 18 | - Converting dates to a human-readable format. 19 | - Extract meaningful insights from data in SQL. 20 | 21 | ### B. What technologies, packages, or functions will students use? Please be exhaustive. 22 | 23 | - `JOIN` 24 | - `DATE_TRUNC` 25 | - `ROUND` 26 | - CTEs (`WITH ___ AS ___`) 27 | - `LAG` 28 | 29 | ### C. What terms or jargon will you define? 30 | 31 | - Common table expressions (CTEs) are temporary tables that store a query's results so that they can be used in a subsequent query while avoiding complex subqueries. 32 | - Window functions look at certain rows related to the current row and apply operations on them like fetching, sliding, and paging. 33 | 34 | ### D. What mistakes or misconceptions do you expect? 35 | 36 | - CTEs are temporary tables; they're destroyed as soon as the query finishes running. 37 | - Window functions always operate based on the window defined in them. 38 | 39 | ### E. What datasets will you use? 40 | 41 | Live training sessions are designed to walk students through something closer to a real-life data science workflow. Accordingly, the dataset needs to accommodate that user experience. 42 | As a rule of thumb, your dataset should always answer yes to the following question: 43 | > Is the dataset/problem I’m working on, something an industry data scientist/analyst could work on? 44 | 45 | Check our [datasets to avoid](https://instructor-support.datacamp.com/en/articles/2360699-datasets-to-avoid) list. 46 | 47 | ## Step 2: Who is this session for? 48 | 49 | Terms like "beginner" and "expert" mean different things to different people, so we use personas to help instructors clarify a live training's audience. When designing a specific live training, instructors should explain how it will or won't help these people, and what extra skills or prerequisite knowledge they are assuming their students have above and beyond what's included in the persona. 50 | 51 | - [X] Please select the roles and industries that align with your live training. 52 | - [X] Include an explanation describing your reasoning and any other relevant information. 53 | 54 | ### What roles would this live training be suitable for? 55 | 56 | *Check all that apply.* 57 | 58 | - [ ] Data Consumer 59 | - [ ] Leader 60 | - [X] Data Analyst 61 | - [X] Citizen Data Scientist 62 | - [ ] Data Scientist 63 | - [ ] Data Engineer 64 | - [X] Database Administrator 65 | - [ ] Statistician 66 | - [ ] Machine Learning Scientist 67 | - [ ] Programmer 68 | - [ ] Other (please describe) 69 | 70 | The course would be suited for anyone who connects to SQL databases to analyze data therein. 71 | 72 | ### What industries would this apply to? 73 | 74 | *List one or more industries that the content would be appropriate for.* 75 | 76 | - E-commerce 77 | - Streaming 78 | - Retail 79 | 80 | ### What level of expertise should learners have before beginning the live training? 81 | 82 | *List three or more examples of skills that you expect learners to have before beginning the live training* 83 | 84 | > - Can use SELECT statements to fetch desired data from a table. 85 | > - Can JOIN tables together. 86 | > - Can calculate grouped summary statistics using SELECT queries with GROUP BY clauses. 87 | > - Can use basic SQL functions to modify results. 88 | 89 | ## Step 3: Prerequisites 90 | 91 | List any prerequisite courses you think your live training could use from. This could be the live session’s companion course or a course you think students should take before the session. Prerequisites act as a guiding principle for your session and will set the topic framework, but you do not have to limit yourself in the live session to the syntax used in the prerequisite courses. 92 | 93 | - Introduction to SQL 94 | - Joining Data in SQL 95 | 96 | ## Step 4: Session Outline 97 | 98 | A live training session usually begins with an introductory presentation, followed by the live training itself, and an ending presentation. Your live session is expected to be around 2h30m-3h long (including Q&A) with a hard-limit at 3h30m. You can check out our live training content guidelines [here](_LINK_). 99 | 100 | ### Introduction Slides 101 | - Introduction to the webinar and instructor (led by DataCamp TA) 102 | - Introduction to the topics 103 | - Stress the ubiquity of SQL databases 104 | - Discuss how dashboarding and reporting tools plug into SQL 105 | - Mention how writing data analysis queries in SQL plays into that 106 | - Set expectations about Q&A 107 | ### Live Training 108 | #### Preparing the data 109 | - Explore the table's schema 110 | - Define basic terms like DAU (daily active users) and MAU (monthly active users) 111 | - Use `GROUP BY` to calculate them 112 | - **Q&A** 113 | #### User retention and churn 114 | - Getting which month each user was active in 115 | - Joining a previous month to a subsequent month to see whether the user churned 116 | - Calculate monthly retention and churn rates 117 | #### User growth 118 | - Using a CTE to store MAU 119 | - Using `LAG` to fetch the previous month's MAU 120 | - Calculating MAU growth 121 | - **Q&A** 122 | ### Ending slides 123 | - Recap of what we learned 124 | - Why data analysis in SQL 125 | - Call to action and course recommendations 126 | 127 | ## Authoring your session 128 | 129 | To get yourself started with setting up your live session, follow the steps below: 130 | 131 | 1. Download and install the "Open in Colabs" extension from [here](https://chrome.google.com/webstore/detail/open-in-colab/iogfkhleblhcpcekbiedikdehleodpjo?hl=en). This will let you take any jupyter notebook you see in a GitHub repository and open it as a **temporary** Colabs link. 132 | 2. Upload your dataset(s) to the `data` folder. 133 | 3. Upload your images, gifs, or any other assets you want to use in the notebook in the `assets` folder. 134 | 4. Check out the notebooks templates in the `notebooks` folder, and keep the template you want for your session while deleting all remaining ones. 135 | 5. Preview your desired notebook, press on "Open in Colabs" extension - and start developing your content in colabs _(which will act as the solution code to the session)_. :warning: **Important** :warning: Your progress will **not** be saved on Google Colabs since it's a temporary link. To save your progress, make sure to press on `File`, `Save a copy in GitHub` and follow remaining prompts. You can also download the notebook locally and develop the content there as long you test out that the syntax works on Colabs as well. 136 | 6. Once your notebooks is ready to go, give it the name `session_name_solution.ipynb` create an empty version of the Notebook to be filled out by you and learners during the session, end the file name with `session_name_learners.ipynb`. 137 | 7. Create Colabs links for both sessions and save them in notebooks :tada: 138 | -------------------------------------------------------------------------------- /notebooks/data_analysis_in_sql.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Data Analysis in SQL.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "id": "tnjoHnXBnlof", 19 | "colab_type": "text" 20 | }, 21 | "source": [ 22 | "

\n", 23 | "\"DataCamp\n", 24 | "

\n", 25 | "

\n", 26 | "\n", 27 | "## **Data Analysis with SQL**\n", 28 | "\n", 29 | "In this webinar, you'll learn how to write advanced queries to calculate core business metrics and KPIs. You'll be able to:\n", 30 | "\n", 31 | "* Use Common Table Expressions to temporarily store a query's results\n", 32 | "* Fetch values from different rows using window functinos\n", 33 | "* Use self-joins to peak into the future\n", 34 | "\n", 35 | "## **The Dataset**\n", 36 | "\n", 37 | "\n", 38 | "We'll use two tables. The first, `user_sessions`, stores data user session data on a social media website. The table's schema is as follows:\n", 39 | "\n", 40 | "- `session_date`: The date on which the user accessed the site\n", 41 | "- `user_id`: The user's unique identifier\n", 42 | "- `time_spent_in_mins`: How much time the user spent on the site\n", 43 | "\n", 44 | "The second, `user_data`, stores the users' metadata. The table's schema is as follows:\n", 45 | "\n", 46 | "- `user_id`: The user's unique identifier\n", 47 | "- `country`: The user's country\n", 48 | "- `age`: The user's age\n" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "id": "agoSpqYunxZ1", 55 | "colab_type": "text" 56 | }, 57 | "source": [ 58 | "## **Setting up PostgreSQL**" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "id": "WZ-Rqu2yoCzR", 65 | "colab_type": "code", 66 | "colab": {} 67 | }, 68 | "source": [ 69 | "#@title **This block of code will install PosgreSQL**\n", 70 | "%%capture\n", 71 | "!wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -\n", 72 | "!echo \"deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main\" >/etc/apt/sources.list.d/pgdg.list\n", 73 | "!apt -qq update\n", 74 | "!apt -yq install postgresql-12 postgresql-client-12\n", 75 | "!service postgresql start\n", 76 | "# make calling psql shorter\n", 77 | "!sudo -u postgres psql -c \"CREATE USER root WITH SUPERUSER\" \n", 78 | "!psql postgres -c \"CREATE DATABASE root\" # now just !psql -c \"...\"\n", 79 | "# load SQL extensions\n", 80 | "%load_ext sql\n", 81 | "%config SqlMagic.feedback=False \n", 82 | "%config SqlMagic.autopandas=True\n", 83 | "%sql postgresql+psycopg2://@/postgres" 84 | ], 85 | "execution_count": 0, 86 | "outputs": [] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "metadata": { 91 | "id": "5spm-fLTn7oP", 92 | "colab_type": "code", 93 | "colab": {} 94 | }, 95 | "source": [ 96 | "#@title **This will download your data to local environment**\n", 97 | "!wget -q https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/data/user_data.csv\n", 98 | "!wget -q https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/data/user_metadata.csv" 99 | ], 100 | "execution_count": 0, 101 | "outputs": [] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "metadata": { 106 | "id": "4fiq0KKsokAX", 107 | "colab_type": "code", 108 | "colab": { 109 | "base_uri": "https://localhost:8080/", 110 | "height": 49 111 | }, 112 | "outputId": "370e9b3a-cc1d-4b69-8035-197211643fa7" 113 | }, 114 | "source": [ 115 | "#@title **This will create your table**\n", 116 | "%%sql\n", 117 | "-- Make sure to amend you table name, column names and types\n", 118 | "DROP TABLE IF EXISTS user_sessions;\n", 119 | "CREATE TABLE user_sessions(\n", 120 | " session_date date,\n", 121 | " user_id int,\n", 122 | " time_spent_in_mins int\n", 123 | ");\n", 124 | "\n", 125 | "COPY user_sessions\n", 126 | "-- Make sure to point to correct file and delimiter \n", 127 | "FROM '/content/user_data.csv' DELIMITER ',' CSV HEADER;\n", 128 | "\n", 129 | "DROP TABLE IF EXISTS user_data;\n", 130 | "CREATE TABLE user_data(\n", 131 | " user_id int,\n", 132 | " country char(3),\n", 133 | " age int\n", 134 | ");\n", 135 | "\n", 136 | "COPY user_data\n", 137 | "-- Make sure to point to correct file and delimiter \n", 138 | "FROM '/content/user_metadata.csv' DELIMITER ',' CSV HEADER;" 139 | ], 140 | "execution_count": 7, 141 | "outputs": [ 142 | { 143 | "output_type": "stream", 144 | "text": [ 145 | " * postgresql+psycopg2://@/postgres\n" 146 | ], 147 | "name": "stdout" 148 | }, 149 | { 150 | "output_type": "execute_result", 151 | "data": { 152 | "text/html": [ 153 | "
\n", 154 | "\n", 167 | "\n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | "
\n", 176 | "
" 177 | ], 178 | "text/plain": [ 179 | "Empty DataFrame\n", 180 | "Columns: []\n", 181 | "Index: []" 182 | ] 183 | }, 184 | "metadata": { 185 | "tags": [] 186 | }, 187 | "execution_count": 7 188 | } 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": { 194 | "id": "tS_PlDcnNaaD", 195 | "colab_type": "text" 196 | }, 197 | "source": [ 198 | "Let's start by exploring the tables." 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "metadata": { 204 | "id": "KpFHkiwIo8KW", 205 | "colab_type": "code", 206 | "colab": {} 207 | }, 208 | "source": [ 209 | "%%sql\n", 210 | "\n", 211 | "-- SELECT first 5 rows from user_sessions\n" 212 | ], 213 | "execution_count": 0, 214 | "outputs": [] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "metadata": { 219 | "id": "Rq6u7Nk4bPMy", 220 | "colab_type": "code", 221 | "colab": {} 222 | }, 223 | "source": [ 224 | "%%sql\n", 225 | "\n", 226 | "-- SELECT first 5 rows from user_data\n" 227 | ], 228 | "execution_count": 0, 229 | "outputs": [] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "metadata": { 234 | "id": "XV--Ei96bUR_", 235 | "colab_type": "code", 236 | "colab": {} 237 | }, 238 | "source": [ 239 | "%%sql\n", 240 | "\n", 241 | "-- Join the two tables together\n" 242 | ], 243 | "execution_count": 0, 244 | "outputs": [] 245 | }, 246 | { 247 | "cell_type": "markdown", 248 | "metadata": { 249 | "id": "aSsGfK7vbcni", 250 | "colab_type": "text" 251 | }, 252 | "source": [ 253 | "## **Data overview**\n", 254 | "\n", 255 | "Since you have user demographics, you can start by exploring some basic metrics, like:\n", 256 | "\n", 257 | "- Average age per country\n", 258 | "- User count by country" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "metadata": { 264 | "id": "YpSQucA8b7Eb", 265 | "colab_type": "code", 266 | "colab": {} 267 | }, 268 | "source": [ 269 | "%%sql\n", 270 | "\n", 271 | "-- Get the average age per country\n" 272 | ], 273 | "execution_count": 0, 274 | "outputs": [] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "metadata": { 279 | "id": "t_-xNWficNTF", 280 | "colab_type": "code", 281 | "colab": {} 282 | }, 283 | "source": [ 284 | "%%sql\n", 285 | "\n", 286 | "-- Get the user count by country \n" 287 | ], 288 | "execution_count": 0, 289 | "outputs": [] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": { 294 | "id": "kExFC7LQccxC", 295 | "colab_type": "text" 296 | }, 297 | "source": [ 298 | "## **Active users**\n", 299 | "\n", 300 | "The active users KPI counts the active users of a company's app over a certain time period:\n", 301 | "- by day (daily active users, or DAU)\n", 302 | "- by month (monthly active users, or MAU)\n", 303 | "\n", 304 | "For example, Facebook had 1.76B DAU and 2.6 MAU in March.\n", 305 | "\n", 306 | "Stickiness (DAU / MAU) measures how often users engage with an app on average. Facebook's stickiness for March was `1.76B / 2.6B ~= 0.677`, meaning that, on average, users used Facebook for `67.7% x 30 days ~= 20` days each month.\n", 307 | "\n", 308 | "To get the daily active users, we need to count the number of unique `user_id`s for each `session_date`" 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "metadata": { 314 | "id": "9ko0H5pSmC-f", 315 | "colab_type": "code", 316 | "colab": {} 317 | }, 318 | "source": [ 319 | "%%sql\n", 320 | "\n", 321 | "-- Calculate the Daily Active Users (DAU)\n", 322 | "\n" 323 | ], 324 | "execution_count": 0, 325 | "outputs": [] 326 | }, 327 | { 328 | "cell_type": "markdown", 329 | "metadata": { 330 | "id": "bYTwPy06qVzu", 331 | "colab_type": "text" 332 | }, 333 | "source": [ 334 | "This is what the results would look like when visualized:\n", 335 | "\n", 336 | "![Facespace DAU](https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/assets/facespace_dau.png)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "markdown", 341 | "metadata": { 342 | "id": "zkNmzkIHh-6e", 343 | "colab_type": "text" 344 | }, 345 | "source": [ 346 | "## **Monthly active users**\n", 347 | "\n", 348 | "Usually, reports include MAU, not DAU. How do you convert the session dates to months?\n", 349 | "\n", 350 | "**Enter `DATE_TRUNC`**\n", 351 | "\n", 352 | "`DATE_TRUNC(date_part, date) → DATE`: Truncates `date` to the nearest `date_part`.\n", 353 | "\n", 354 | "**Examples**\n", 355 | "- `DATE_TRUNC('week', '2018-06-12') :: DATE` → `'2018-06-11'`\n", 356 | "- `DATE_TRUNC('month', '2018-06-12') :: DATE` → `'2018-06-01'`\n", 357 | "- `DATE_TRUNC('quarter', '2018-06-12') :: DATE` → `'2018-04-01'`\n", 358 | "- `DATE_TRUNC('year', '2018-06-12') :: DATE` → `'2018-01-01'`\n", 359 | "\n", 360 | "**Note**: `:: DATE` is just to remove the hours, minutes, and seconds." 361 | ] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "metadata": { 366 | "id": "VNsxnr0cmSLV", 367 | "colab_type": "code", 368 | "colab": {} 369 | }, 370 | "source": [ 371 | "%%sql\n", 372 | "\n", 373 | "-- Calculate the Monthly Active Users (DAU)\n" 374 | ], 375 | "execution_count": 0, 376 | "outputs": [] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": { 381 | "id": "qFI164WOqpm_", 382 | "colab_type": "text" 383 | }, 384 | "source": [ 385 | "This is what the results would look like when visualized:\n", 386 | "\n", 387 | "![Facebook MAU](https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/assets/facespace_mau.png)" 388 | ] 389 | }, 390 | { 391 | "cell_type": "markdown", 392 | "metadata": { 393 | "id": "1fJ5XosE4spe", 394 | "colab_type": "text" 395 | }, 396 | "source": [ 397 | "## **Q&A**" 398 | ] 399 | }, 400 | { 401 | "cell_type": "markdown", 402 | "metadata": { 403 | "id": "Mig_YapOkBpv", 404 | "colab_type": "text" 405 | }, 406 | "source": [ 407 | "## **Registration dates**\n", 408 | "\n", 409 | "Let's define the user's registration date as the date of that user's first session.\n", 410 | "\n", 411 | "So, each user's registration date is the minimum session date for that user in the `user_sessions` table.\n", 412 | "\n", 413 | "We'll use these results later on to calculate the growth in registrations." 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "metadata": { 419 | "id": "9yyYTFcWkXCq", 420 | "colab_type": "code", 421 | "colab": {} 422 | }, 423 | "source": [ 424 | "%%sql\n", 425 | "\n", 426 | "-- Get each user's registration date\n" 427 | ], 428 | "execution_count": 0, 429 | "outputs": [] 430 | }, 431 | { 432 | "cell_type": "markdown", 433 | "metadata": { 434 | "id": "2N_xwF7Yup2b", 435 | "colab_type": "text" 436 | }, 437 | "source": [ 438 | "## **Registrations and Common Table Expressions (CTEs)**\n", 439 | "\n", 440 | "Now that you have each user's registration date, you'll want to store the results somehow to use them in a different query. How do you do that?\n", 441 | "\n", 442 | "**Enter Common Table Expressions (CTEs)**\n", 443 | "\n", 444 | "```sql\n", 445 | "WITH cte_name AS (\n", 446 | " ...\n", 447 | ")\n", 448 | "\n", 449 | "SELECT *\n", 450 | "FROM cte_name;\n", 451 | "```\n", 452 | "\n", 453 | "A CTE stores the results of a query temporarily in the specificed `cte_name` so it can be used in the outer query later on.\n", 454 | "\n", 455 | "Once you store the results of the previous query in a CTE, you can `DATE_TRUNC()` the registration dates and count the unique `user_id`s in each registration month." 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "metadata": { 461 | "id": "nFfDu_aQm9dD", 462 | "colab_type": "code", 463 | "colab": {} 464 | }, 465 | "source": [ 466 | "%%sql\n", 467 | "\n", 468 | "-- Store each user's registration date in the regs CTE\n", 469 | "-- Calculate the number of registrations per month\n" 470 | ], 471 | "execution_count": 0, 472 | "outputs": [] 473 | }, 474 | { 475 | "cell_type": "markdown", 476 | "metadata": { 477 | "id": "txxa2OVBvuYW", 478 | "colab_type": "text" 479 | }, 480 | "source": [ 481 | "## **Growth and window functions**\n", 482 | "\n", 483 | "You now have each month's registrations. How do you calculate growth?\n", 484 | "\n", 485 | "`Growth = (Current month - previous month) / previous month`\n", 486 | "\n", 487 | "For example, if you had 122 registrations last month, and you have 156 registrations this month, your registrations grew by `(156 - 122) / 122 ~= 28%` this month.\n", 488 | "\n", 489 | "So you need both the previous and the current months' registrations in the same row. How do you do that?\n", 490 | "\n", 491 | "**Window functions**\n", 492 | "\n", 493 | "A window function performs some operation across a set of table rows that are somehow related to the current row.\n", 494 | "\n", 495 | "- `LAG(column_a, 1) OVER (ORDER BY column_b ASC)` Gets the previous row's value in `column_a` if you sort by `column_b`." 496 | ] 497 | }, 498 | { 499 | "cell_type": "code", 500 | "metadata": { 501 | "id": "BKg-pJpjoS4F", 502 | "colab_type": "code", 503 | "colab": {} 504 | }, 505 | "source": [ 506 | "%%sql\n", 507 | "-- Fetch the previous and current months' MAUs\n" 508 | ], 509 | "execution_count": 0, 510 | "outputs": [] 511 | }, 512 | { 513 | "cell_type": "markdown", 514 | "metadata": { 515 | "id": "JFNbQqVjyyvn", 516 | "colab_type": "text" 517 | }, 518 | "source": [ 519 | "Store the results in a CTE and apply the formula to get the monthly registrations growth rates. You can use `COALESCE(..., 1)` to convert any `NULL` values to 1." 520 | ] 521 | }, 522 | { 523 | "cell_type": "code", 524 | "metadata": { 525 | "id": "teCiC7UOpPfi", 526 | "colab_type": "code", 527 | "colab": {} 528 | }, 529 | "source": [ 530 | "%%sql\n", 531 | "\n", 532 | "-- Calculate the monthly growth in registrations\n" 533 | ], 534 | "execution_count": 0, 535 | "outputs": [] 536 | }, 537 | { 538 | "cell_type": "markdown", 539 | "metadata": { 540 | "id": "5f1gf7yP4v0r", 541 | "colab_type": "text" 542 | }, 543 | "source": [ 544 | "## **Q&A**" 545 | ] 546 | }, 547 | { 548 | "cell_type": "markdown", 549 | "metadata": { 550 | "id": "oEzlg4iF0UJ0", 551 | "colab_type": "text" 552 | }, 553 | "source": [ 554 | "## **Retained and resurrected users**\n", 555 | "\n", 556 | "Users can be split into four groups:\n", 557 | "- New/registered users are ones that just signed up for your platform\n", 558 | "- Retained users used to use your app, and still do, too.\n", 559 | "- Churned users used to use your app, and no longer do.\n", 560 | "- Resurrected users were churned users who returned to using your app.\n", 561 | "\n", 562 | "Retention is another core KPI that platforms use to measure how well they are at keeping their users.\n", 563 | "\n", 564 | "The first step to calculating retention is getting each of the months in which each user is active." 565 | ] 566 | }, 567 | { 568 | "cell_type": "code", 569 | "metadata": { 570 | "id": "LiILc4mRrLmJ", 571 | "colab_type": "code", 572 | "colab": {} 573 | }, 574 | "source": [ 575 | "%%sql\n", 576 | "\n", 577 | "-- Get the months in which each user is active\n" 578 | ], 579 | "execution_count": 0, 580 | "outputs": [] 581 | }, 582 | { 583 | "cell_type": "markdown", 584 | "metadata": { 585 | "id": "1NyCdBWR2pO-", 586 | "colab_type": "text" 587 | }, 588 | "source": [ 589 | "## **Self-joins**\n", 590 | "\n", 591 | "Now that you have the months in which each user is active, how do you calculate retention?\n", 592 | "\n", 593 | "![Left joins](https://user-images.githubusercontent.com/48436758/83518570-e4ff8c00-a4da-11ea-8a5a-25ea46df2bcc.png)\n", 594 | "\n", 595 | "If you left-join this table on itself on the same user ID and having a one-month difference in users, you'll see whether a user is still active in the next month or not. If the user isn't active, then the user is churned. The count of non-`NULL`s is the count of retained users.\n", 596 | "\n", 597 | "```sql\n", 598 | "...\n", 599 | "FROM ... AS prev\n", 600 | "LEFT JOIN ... AS curr\n", 601 | " ON prev.user_id = curr.user_id\n", 602 | " AND prev.month = (curr.month - INTERVAL '1 MONTH')\n", 603 | "...\n", 604 | "```\n", 605 | "\n" 606 | ] 607 | }, 608 | { 609 | "cell_type": "code", 610 | "metadata": { 611 | "id": "mcQbmTtF27OQ", 612 | "colab_type": "code", 613 | "colab": {} 614 | }, 615 | "source": [ 616 | "%%sql\n", 617 | "\n", 618 | "-- Get whether each user churned in a given month\n" 619 | ], 620 | "execution_count": 0, 621 | "outputs": [] 622 | }, 623 | { 624 | "cell_type": "markdown", 625 | "metadata": { 626 | "id": "ocFiH81H5Rgu", 627 | "colab_type": "text" 628 | }, 629 | "source": [ 630 | "Store the results in a CTE and count the number of `FALSE` in the `churned_next_month` to get the retention rate." 631 | ] 632 | }, 633 | { 634 | "cell_type": "code", 635 | "metadata": { 636 | "id": "fZJd5X7Y5CNN", 637 | "colab_type": "code", 638 | "colab": {} 639 | }, 640 | "source": [ 641 | "%%sql\n", 642 | "\n", 643 | "-- Calculate the retention rate\n" 644 | ], 645 | "execution_count": 0, 646 | "outputs": [] 647 | }, 648 | { 649 | "cell_type": "markdown", 650 | "metadata": { 651 | "id": "vjhqpm3FkUa3", 652 | "colab_type": "text" 653 | }, 654 | "source": [ 655 | "## **Average age of churners**\n", 656 | "\n", 657 | "Now that you have the retention status of each user, you can see whether there are any trends in churns, such as older people churning more.\n" 658 | ] 659 | }, 660 | { 661 | "cell_type": "code", 662 | "metadata": { 663 | "id": "hIYNx8m-kYhN", 664 | "colab_type": "code", 665 | "colab": {} 666 | }, 667 | "source": [ 668 | "%%sql\n", 669 | "\n", 670 | "-- Get the average age of churners versus retained users in April\n" 671 | ], 672 | "execution_count": 0, 673 | "outputs": [] 674 | }, 675 | { 676 | "cell_type": "markdown", 677 | "metadata": { 678 | "id": "tBCRa0Ba4xK2", 679 | "colab_type": "text" 680 | }, 681 | "source": [ 682 | "## **Q&A**" 683 | ] 684 | } 685 | ] 686 | } -------------------------------------------------------------------------------- /notebooks/data_analysis_in_sql_solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Data Analysis in SQL Solution.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "id": "tnjoHnXBnlof", 19 | "colab_type": "text" 20 | }, 21 | "source": [ 22 | "

\n", 23 | "\"DataCamp\n", 24 | "

\n", 25 | "

\n", 26 | "\n", 27 | "## **Data Analysis with SQL**\n", 28 | "\n", 29 | "In this webinar, you'll learn how to write advanced queries to calculate core business metrics and KPIs. You'll be able to:\n", 30 | "\n", 31 | "* Use Common Table Expressions to temporarily store a query's results\n", 32 | "* Fetch values from different rows using window functinos\n", 33 | "* Use self-joins to peak into the future\n", 34 | "\n", 35 | "## **The Dataset**\n", 36 | "\n", 37 | "We'll use two tables. The first, `user_sessions`, stores data user session data on a social media website. The table's schema is as follows:\n", 38 | "\n", 39 | "- `session_date`: The date on which the user accessed the site\n", 40 | "- `user_id`: The user's unique identifier\n", 41 | "- `time_spent_in_mins`: How much time the user spent on the site\n", 42 | "\n", 43 | "The second, `user_data`, stores the users' metadata. The table's schema is as follows:\n", 44 | "\n", 45 | "- `user_id`: The user's unique identifier\n", 46 | "- `country`: The user's country\n", 47 | "- `age`: The user's age\n", 48 | "\n" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "id": "agoSpqYunxZ1", 55 | "colab_type": "text" 56 | }, 57 | "source": [ 58 | "## **Setting up PostgreSQL**" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "id": "WZ-Rqu2yoCzR", 65 | "colab_type": "code", 66 | "colab": {} 67 | }, 68 | "source": [ 69 | "#@title **This block of code will install PosgreSQL**\n", 70 | "%%capture\n", 71 | "!wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -\n", 72 | "!echo \"deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main\" >/etc/apt/sources.list.d/pgdg.list\n", 73 | "!apt -qq update\n", 74 | "!apt -yq install postgresql-12 postgresql-client-12\n", 75 | "!service postgresql start\n", 76 | "# make calling psql shorter\n", 77 | "!sudo -u postgres psql -c \"CREATE USER root WITH SUPERUSER\" \n", 78 | "!psql postgres -c \"CREATE DATABASE root\" # now just !psql -c \"...\"\n", 79 | "# load SQL extensions\n", 80 | "%load_ext sql\n", 81 | "%config SqlMagic.feedback=False \n", 82 | "%config SqlMagic.autopandas=True\n", 83 | "%sql postgresql+psycopg2://@/postgres" 84 | ], 85 | "execution_count": 0, 86 | "outputs": [] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "metadata": { 91 | "id": "5spm-fLTn7oP", 92 | "colab_type": "code", 93 | "colab": {} 94 | }, 95 | "source": [ 96 | "#@title **This will download your data to local environment**\n", 97 | "!wget -q https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/data/user_data.csv\n", 98 | "!wget -q https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/data/user_metadata.csv" 99 | ], 100 | "execution_count": 0, 101 | "outputs": [] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "metadata": { 106 | "id": "4fiq0KKsokAX", 107 | "colab_type": "code", 108 | "colab": {} 109 | }, 110 | "source": [ 111 | "#@title **This will create your table**\n", 112 | "%%sql\n", 113 | "-- Make sure to amend you table name, column names and types\n", 114 | "DROP TABLE IF EXISTS user_sessions;\n", 115 | "CREATE TABLE user_sessions(\n", 116 | " session_date date,\n", 117 | " user_id int,\n", 118 | " time_spent_in_mins int\n", 119 | ");\n", 120 | "\n", 121 | "COPY user_sessions\n", 122 | "-- Make sure to point to correct file and delimiter \n", 123 | "FROM '/content/user_data.csv' DELIMITER ',' CSV HEADER;\n", 124 | "\n", 125 | "DROP TABLE IF EXISTS user_data;\n", 126 | "CREATE TABLE user_data(\n", 127 | " user_id int,\n", 128 | " country char(3),\n", 129 | " age int\n", 130 | ");\n", 131 | "\n", 132 | "COPY user_data\n", 133 | "-- Make sure to point to correct file and delimiter \n", 134 | "FROM '/content/user_metadata.csv' DELIMITER ',' CSV HEADER;" 135 | ], 136 | "execution_count": 0, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": { 142 | "id": "tS_PlDcnNaaD", 143 | "colab_type": "text" 144 | }, 145 | "source": [ 146 | "Let's start by exploring the tables." 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "metadata": { 152 | "id": "KpFHkiwIo8KW", 153 | "colab_type": "code", 154 | "colab": {} 155 | }, 156 | "source": [ 157 | "%%sql\n", 158 | "\n", 159 | "-- SELECT first 5 rows from user_sessions\n", 160 | "\n", 161 | "SELECT *\n", 162 | "FROM user_sessions \n", 163 | "LIMIT 5;" 164 | ], 165 | "execution_count": 0, 166 | "outputs": [] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "metadata": { 171 | "id": "nJGl2cbMdMKz", 172 | "colab_type": "code", 173 | "colab": {} 174 | }, 175 | "source": [ 176 | "%%sql\n", 177 | "\n", 178 | "-- SELECT first 5 rows from user_data\n", 179 | "\n", 180 | "SELECT *\n", 181 | "FROM user_data \n", 182 | "LIMIT 5;" 183 | ], 184 | "execution_count": 0, 185 | "outputs": [] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "metadata": { 190 | "id": "vSKdfZ-cdQjG", 191 | "colab_type": "code", 192 | "colab": {} 193 | }, 194 | "source": [ 195 | "%%sql\n", 196 | "\n", 197 | "-- Join the two tables together\n", 198 | "\n", 199 | "SELECT *\n", 200 | "FROM user_sessions\n", 201 | "JOIN user_data ON user_sessions.user_id = user_data.user_id\n", 202 | "LIMIT 5;" 203 | ], 204 | "execution_count": 0, 205 | "outputs": [] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": { 210 | "id": "UKGmJTbtdP6-", 211 | "colab_type": "text" 212 | }, 213 | "source": [ 214 | "## **Data overview**\n", 215 | "\n", 216 | "Since you have user demographics, you can start by exploring some basic metrics, like:\n", 217 | "\n", 218 | "- Average age per country\n", 219 | "- User count by country" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "metadata": { 225 | "id": "mzEewDukdQKA", 226 | "colab_type": "code", 227 | "colab": {} 228 | }, 229 | "source": [ 230 | "%%sql\n", 231 | "\n", 232 | "-- Get the average age per country\n", 233 | "\n", 234 | "SELECT\n", 235 | " country,\n", 236 | " ROUND(AVG(age), 2) AS avg_age\n", 237 | "FROM user_data\n", 238 | "GROUP BY country\n", 239 | "ORDER BY country ASC;" 240 | ], 241 | "execution_count": 0, 242 | "outputs": [] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "metadata": { 247 | "id": "64-tDYbIdeqn", 248 | "colab_type": "code", 249 | "colab": {} 250 | }, 251 | "source": [ 252 | "%%sql\n", 253 | "\n", 254 | "-- Get the user count by country \n", 255 | "\n", 256 | "SELECT\n", 257 | " country,\n", 258 | " COUNT(DISTINCT user_id) AS users\n", 259 | "FROM user_data\n", 260 | "GROUP BY country\n", 261 | "ORDER BY country ASC;" 262 | ], 263 | "execution_count": 0, 264 | "outputs": [] 265 | }, 266 | { 267 | "cell_type": "markdown", 268 | "metadata": { 269 | "id": "kExFC7LQccxC", 270 | "colab_type": "text" 271 | }, 272 | "source": [ 273 | "## **Active users**\n", 274 | "\n", 275 | "The active users KPI counts the active users of a company's app over a certain time period:\n", 276 | "- by day (daily active users, or DAU)\n", 277 | "- by month (monthly active users, or MAU)\n", 278 | "\n", 279 | "For example, Facebook had 1.76B DAU and 2.6 MAU in March.\n", 280 | "\n", 281 | "Stickiness (DAU / MAU) measures how often users engage with an app on average. Facebook's stickiness for March was `1.76B / 2.6B ~= 0.677`, meaning that, on average, users used Facebook for `67.7% x 30 days ~= 20` days each month.\n", 282 | "\n", 283 | "To get the daily active users, we need to count the number of unique `user_id`s for each `session_date`" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "metadata": { 289 | "id": "9ko0H5pSmC-f", 290 | "colab_type": "code", 291 | "colab": {} 292 | }, 293 | "source": [ 294 | "%%sql\n", 295 | "\n", 296 | "-- Calculate the Daily Active Users (DAU)\n", 297 | "\n", 298 | "SELECT DISTINCT\n", 299 | " session_date,\n", 300 | " COUNT(DISTINCT user_id) AS users\n", 301 | "FROM user_sessions\n", 302 | "GROUP BY session_date\n", 303 | "ORDER BY session_date ASC;" 304 | ], 305 | "execution_count": 0, 306 | "outputs": [] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": { 311 | "id": "bYTwPy06qVzu", 312 | "colab_type": "text" 313 | }, 314 | "source": [ 315 | "This is what the results would look like when visualized:\n", 316 | "\n", 317 | "![Facespace DAU](https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/assets/facespace_dau.png)" 318 | ] 319 | }, 320 | { 321 | "cell_type": "markdown", 322 | "metadata": { 323 | "id": "zkNmzkIHh-6e", 324 | "colab_type": "text" 325 | }, 326 | "source": [ 327 | "## **Monthly active users**\n", 328 | "\n", 329 | "Usually, reports include MAU, not DAU. How do you convert the session dates to months?\n", 330 | "\n", 331 | "**Enter `DATE_TRUNC`**\n", 332 | "\n", 333 | "`DATE_TRUNC(date_part, date) → DATE`: Truncates `date` to the nearest `date_part`.\n", 334 | "\n", 335 | "**Examples**\n", 336 | "- `DATE_TRUNC('week', '2018-06-12') :: DATE` → `'2018-06-11'`\n", 337 | "- `DATE_TRUNC('month', '2018-06-12') :: DATE` → `'2018-06-01'`\n", 338 | "- `DATE_TRUNC('quarter', '2018-06-12') :: DATE` → `'2018-04-01'`\n", 339 | "- `DATE_TRUNC('year', '2018-06-12') :: DATE` → `'2018-01-01'`\n", 340 | "\n", 341 | "**Note**: `:: DATE` is just to remove the hours, minutes, and seconds." 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "metadata": { 347 | "id": "VNsxnr0cmSLV", 348 | "colab_type": "code", 349 | "colab": {} 350 | }, 351 | "source": [ 352 | "%%sql\n", 353 | "\n", 354 | "-- Calculate the Monthly Active Users (DAU)\n", 355 | "\n", 356 | "SELECT\n", 357 | " DATE_TRUNC('month', session_date) :: DATE AS session_month,\n", 358 | " COUNT(DISTINCT user_id) AS active_users\n", 359 | "FROM user_sessions\n", 360 | "GROUP BY session_month\n", 361 | "ORDER BY session_month ASC;" 362 | ], 363 | "execution_count": 0, 364 | "outputs": [] 365 | }, 366 | { 367 | "cell_type": "markdown", 368 | "metadata": { 369 | "id": "qFI164WOqpm_", 370 | "colab_type": "text" 371 | }, 372 | "source": [ 373 | "This is what the results would look like when visualized:\n", 374 | "\n", 375 | "![Facebook MAU](https://github.com/datacamp/data-analysis-in-sql-live-training/raw/master/assets/facespace_mau.png)" 376 | ] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": { 381 | "id": "PAZO1w0R4M9o", 382 | "colab_type": "text" 383 | }, 384 | "source": [ 385 | "## **Q&A**" 386 | ] 387 | }, 388 | { 389 | "cell_type": "markdown", 390 | "metadata": { 391 | "id": "Mig_YapOkBpv", 392 | "colab_type": "text" 393 | }, 394 | "source": [ 395 | "## **Registration dates**\n", 396 | "\n", 397 | "Let's define the user's registration date as the date of that user's first session.\n", 398 | "\n", 399 | "So, each user's registration date is the minimum session date for that user in the `user_sessions` table.\n", 400 | "\n", 401 | "We'll use these results later on to calculate the growth in registrations." 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "metadata": { 407 | "id": "9yyYTFcWkXCq", 408 | "colab_type": "code", 409 | "colab": {} 410 | }, 411 | "source": [ 412 | "%%sql\n", 413 | "\n", 414 | "-- Get each user's registration date\n", 415 | "\n", 416 | "SELECT\n", 417 | " user_id,\n", 418 | " MIN(session_date) AS reg_date\n", 419 | "FROM user_sessions\n", 420 | "GROUP BY user_id\n", 421 | "ORDER BY reg_date ASC, user_id ASC;" 422 | ], 423 | "execution_count": 0, 424 | "outputs": [] 425 | }, 426 | { 427 | "cell_type": "markdown", 428 | "metadata": { 429 | "id": "2N_xwF7Yup2b", 430 | "colab_type": "text" 431 | }, 432 | "source": [ 433 | "## **Registrations and Common Table Expressions (CTEs)**\n", 434 | "\n", 435 | "Now that you have each user's registration date, you'll want to store the results somehow to use them in a different query. How do you do that?\n", 436 | "\n", 437 | "**Enter Common Table Expressions (CTEs)**\n", 438 | "\n", 439 | "```sql\n", 440 | "WITH cte_name AS (\n", 441 | " ...\n", 442 | ")\n", 443 | "\n", 444 | "SELECT *\n", 445 | "FROM cte_name;\n", 446 | "```\n", 447 | "\n", 448 | "A CTE stores the results of a query temporarily in the specificed `cte_name` so it can be used in the outer query later on.\n", 449 | "\n", 450 | "Once you store the results of the previous query in a CTE, you can `DATE_TRUNC()` the registration dates and count the unique `user_id`s in each registration month." 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "metadata": { 456 | "id": "nFfDu_aQm9dD", 457 | "colab_type": "code", 458 | "colab": {} 459 | }, 460 | "source": [ 461 | "%%sql\n", 462 | "\n", 463 | "-- Store each user's registration date in the regs CTE\n", 464 | "-- Calculate the number of registrations per month\n", 465 | "\n", 466 | "WITH regs AS (\n", 467 | " SELECT\n", 468 | " user_id,\n", 469 | " MIN(session_date) AS reg_date\n", 470 | " FROM user_sessions\n", 471 | " GROUP BY user_id)\n", 472 | "\n", 473 | "SELECT\n", 474 | " DATE_TRUNC('month', reg_date) :: DATE AS reg_month,\n", 475 | " COUNT(DISTINCT user_id) AS users\n", 476 | "FROM regs\n", 477 | "GROUP BY reg_month\n", 478 | "ORDER BY reg_month ASC;" 479 | ], 480 | "execution_count": 0, 481 | "outputs": [] 482 | }, 483 | { 484 | "cell_type": "markdown", 485 | "metadata": { 486 | "id": "txxa2OVBvuYW", 487 | "colab_type": "text" 488 | }, 489 | "source": [ 490 | "## **Growth and window functions**\n", 491 | "\n", 492 | "You now have each month's registrations. How do you calculate growth?\n", 493 | "\n", 494 | "`Growth = (Current month - previous month) / previous month`\n", 495 | "\n", 496 | "For example, if you had 122 registrations last month, and you have 156 registrations this month, your registrations grew by `(156 - 122) / 122 ~= 28%` this month.\n", 497 | "\n", 498 | "So you need both the previous and the current months' registrations in the same row. How do you do that?\n", 499 | "\n", 500 | "**Window functions**\n", 501 | "\n", 502 | "A window function performs some operation across a set of table rows that are somehow related to the current row.\n", 503 | "\n", 504 | "- `LAG(column_a, 1) OVER (ORDER BY column_b ASC)` Gets the previous row's value in `column_a` if you sort by `column_b`." 505 | ] 506 | }, 507 | { 508 | "cell_type": "code", 509 | "metadata": { 510 | "id": "BKg-pJpjoS4F", 511 | "colab_type": "code", 512 | "colab": {} 513 | }, 514 | "source": [ 515 | "%%sql\n", 516 | "-- Fetch the previous and current months' MAUs\n", 517 | "\n", 518 | "\n", 519 | "WITH regs AS (\n", 520 | " SELECT\n", 521 | " user_id,\n", 522 | " MIN(session_date) AS reg_date\n", 523 | " FROM user_sessions\n", 524 | " GROUP BY user_id),\n", 525 | "\n", 526 | " regs_per_month AS (\n", 527 | " SELECT\n", 528 | " DATE_TRUNC('month', reg_date) :: DATE AS reg_month,\n", 529 | " COUNT(DISTINCT user_id) AS users\n", 530 | " FROM regs\n", 531 | " GROUP BY reg_month\n", 532 | " )\n", 533 | "\n", 534 | "SELECT\n", 535 | " reg_month,\n", 536 | " users,\n", 537 | " LAG(users, 1) OVER (ORDER BY regs_per_month ASC) AS previous_users\n", 538 | "FROM regs_per_month\n", 539 | "ORDER BY reg_month ASC;" 540 | ], 541 | "execution_count": 0, 542 | "outputs": [] 543 | }, 544 | { 545 | "cell_type": "markdown", 546 | "metadata": { 547 | "id": "JFNbQqVjyyvn", 548 | "colab_type": "text" 549 | }, 550 | "source": [ 551 | "Store the results in a CTE and apply the formula to get the monthly registrations growth rates. You can use `COALESCE(..., 1)` to convert any `NULL` values to 1." 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "metadata": { 557 | "id": "teCiC7UOpPfi", 558 | "colab_type": "code", 559 | "colab": {} 560 | }, 561 | "source": [ 562 | "%%sql\n", 563 | "\n", 564 | "-- Calculate the monthly growth in registrations\n", 565 | "\n", 566 | "WITH regs AS (\n", 567 | " SELECT\n", 568 | " user_id,\n", 569 | " MIN(session_date) AS reg_date\n", 570 | " FROM user_sessions\n", 571 | " GROUP BY user_id),\n", 572 | "\n", 573 | " regs_per_month AS (\n", 574 | " SELECT\n", 575 | " DATE_TRUNC('month', reg_date) :: DATE AS reg_month,\n", 576 | " COUNT(DISTINCT user_id) AS users\n", 577 | " FROM regs\n", 578 | " GROUP BY reg_month\n", 579 | " ),\n", 580 | "\n", 581 | " lag_regs AS (\n", 582 | " SELECT\n", 583 | " reg_month,\n", 584 | " users,\n", 585 | " COALESCE(\n", 586 | " LAG(users, 1) OVER (ORDER BY regs_per_month ASC), 1\n", 587 | " ) AS previous_users\n", 588 | " FROM regs_per_month)\n", 589 | "\n", 590 | "SELECT\n", 591 | " reg_month,\n", 592 | " users,\n", 593 | " ROUND(\n", 594 | " (users - previous_users) :: NUMERIC / previous_users, 3\n", 595 | " ) AS growth_rate\n", 596 | "FROM lag_regs\n", 597 | "ORDER BY reg_month ASC;" 598 | ], 599 | "execution_count": 0, 600 | "outputs": [] 601 | }, 602 | { 603 | "cell_type": "markdown", 604 | "metadata": { 605 | "id": "vDlpc8OT4U6M", 606 | "colab_type": "text" 607 | }, 608 | "source": [ 609 | "## **Q&A**" 610 | ] 611 | }, 612 | { 613 | "cell_type": "markdown", 614 | "metadata": { 615 | "id": "oEzlg4iF0UJ0", 616 | "colab_type": "text" 617 | }, 618 | "source": [ 619 | "## **Retained and resurrected users**\n", 620 | "\n", 621 | "Users can be split into four groups:\n", 622 | "- New/registered users are ones that just signed up for your platform\n", 623 | "- Retained users used to use your app, and still do, too.\n", 624 | "- Churned users used to use your app, and no longer do.\n", 625 | "- Resurrected users were churned users who returned to using your app.\n", 626 | "\n", 627 | "Retention is another core KPI that platforms use to measure how well they are at keeping their users.\n", 628 | "\n", 629 | "The first step to calculating retention is getting each of the months in which each user is active." 630 | ] 631 | }, 632 | { 633 | "cell_type": "code", 634 | "metadata": { 635 | "id": "LiILc4mRrLmJ", 636 | "colab_type": "code", 637 | "colab": {} 638 | }, 639 | "source": [ 640 | "%%sql\n", 641 | "\n", 642 | "-- Get the months in which each user is active\n", 643 | "\n", 644 | "SELECT DISTINCT\n", 645 | " DATE_TRUNC('month', session_date) :: DATE AS act_month,\n", 646 | " user_id\n", 647 | "FROM user_sessions\n", 648 | "ORDER BY act_month ASC, user_id ASC;" 649 | ], 650 | "execution_count": 0, 651 | "outputs": [] 652 | }, 653 | { 654 | "cell_type": "markdown", 655 | "metadata": { 656 | "id": "1NyCdBWR2pO-", 657 | "colab_type": "text" 658 | }, 659 | "source": [ 660 | "## **Self-joins**\n", 661 | "\n", 662 | "Now that you have the months in which each user is active, how do you calculate retention?\n", 663 | "\n", 664 | "![Left joins](https://user-images.githubusercontent.com/48436758/83518570-e4ff8c00-a4da-11ea-8a5a-25ea46df2bcc.png)\n", 665 | "\n", 666 | "If you left-join this table on itself on the same user ID and having a one-month difference in users, you'll see whether a user is still active in the next month or not. If the user isn't active, then the user is churned. The count of non-`NULL`s is the count of retained users.\n", 667 | "\n", 668 | "```sql\n", 669 | "...\n", 670 | "FROM ... AS prev\n", 671 | "LEFT JOIN ... AS curr\n", 672 | " ON prev.user_id = curr.user_id\n", 673 | " AND prev.month = (curr.month - INTERVAL '1 MONTH')\n", 674 | "...\n", 675 | "```\n", 676 | "\n" 677 | ] 678 | }, 679 | { 680 | "cell_type": "code", 681 | "metadata": { 682 | "id": "mcQbmTtF27OQ", 683 | "colab_type": "code", 684 | "colab": {} 685 | }, 686 | "source": [ 687 | "%%sql\n", 688 | "\n", 689 | "-- Get whether each user churned in a given month\n", 690 | "\n", 691 | "WITH act_months AS (\n", 692 | " SELECT DISTINCT\n", 693 | " DATE_TRUNC('month', session_date) :: DATE AS act_month,\n", 694 | " user_id\n", 695 | " FROM user_sessions)\n", 696 | "\n", 697 | "SELECT\n", 698 | " prev.act_month,\n", 699 | " prev.user_id,\n", 700 | " curr.user_id IS NULL AS churned_next_month\n", 701 | "FROM act_months AS prev\n", 702 | "LEFT JOIN act_months AS curr\n", 703 | " ON prev.user_id = curr.user_id\n", 704 | " AND prev.act_month = (curr.act_month - INTERVAL '1 MONTH')\n", 705 | "ORDER BY prev.act_month ASC, prev.user_id ASC;" 706 | ], 707 | "execution_count": 0, 708 | "outputs": [] 709 | }, 710 | { 711 | "cell_type": "markdown", 712 | "metadata": { 713 | "id": "ocFiH81H5Rgu", 714 | "colab_type": "text" 715 | }, 716 | "source": [ 717 | "Store the results in a CTE and count the number of `FALSE` in the `churned_next_month` to get the retention rate." 718 | ] 719 | }, 720 | { 721 | "cell_type": "code", 722 | "metadata": { 723 | "id": "fZJd5X7Y5CNN", 724 | "colab_type": "code", 725 | "colab": {} 726 | }, 727 | "source": [ 728 | "%%sql\n", 729 | "\n", 730 | "-- Calculate the retention rate\n", 731 | "\n", 732 | "WITH act_months AS (\n", 733 | " SELECT DISTINCT\n", 734 | " DATE_TRUNC('month', session_date) :: DATE AS act_month,\n", 735 | " user_id\n", 736 | " FROM user_sessions),\n", 737 | "\n", 738 | " churned AS (\n", 739 | " SELECT\n", 740 | " prev.act_month,\n", 741 | " prev.user_id,\n", 742 | " curr.user_id IS NULL AS churned_next_month\n", 743 | " FROM act_months AS prev\n", 744 | " LEFT JOIN act_months AS curr\n", 745 | " ON prev.user_id = curr.user_id\n", 746 | " AND prev.act_month = (curr.act_month - INTERVAL '1 MONTH'))\n", 747 | " \n", 748 | "SELECT\n", 749 | " act_month,\n", 750 | " COUNT(DISTINCT user_id) AS users,\n", 751 | " SUM(CASE WHEN NOT churned_next_month THEN 1 ELSE 0 END) AS retained_next_month,\n", 752 | " ROUND(\n", 753 | " SUM(CASE WHEN NOT churned_next_month THEN 1 ELSE 0 END) :: NUMERIC /\n", 754 | " COUNT(DISTINCT user_id), 3\n", 755 | " ) AS retention_rate\n", 756 | "FROM churned\n", 757 | "GROUP BY act_month\n", 758 | "ORDER BY act_month ASC;" 759 | ], 760 | "execution_count": 0, 761 | "outputs": [] 762 | }, 763 | { 764 | "cell_type": "markdown", 765 | "metadata": { 766 | "id": "F5LjlR9li1HS", 767 | "colab_type": "text" 768 | }, 769 | "source": [ 770 | "## **Average age of churners**\n", 771 | "\n", 772 | "Now that you have the retention status of each user, you can see whether there are any trends in churns, such as older people churning more." 773 | ] 774 | }, 775 | { 776 | "cell_type": "code", 777 | "metadata": { 778 | "id": "hXor4oHpiA8u", 779 | "colab_type": "code", 780 | "colab": {} 781 | }, 782 | "source": [ 783 | "%%sql\n", 784 | "\n", 785 | "-- Get the average age of churners versus retained users in April\n", 786 | "\n", 787 | "WITH act_months AS (\n", 788 | " SELECT DISTINCT\n", 789 | " DATE_TRUNC('month', session_date) :: DATE AS act_month,\n", 790 | " user_id\n", 791 | " FROM user_sessions),\n", 792 | "\n", 793 | " churned AS (\n", 794 | " SELECT\n", 795 | " prev.act_month,\n", 796 | " prev.user_id,\n", 797 | " curr.user_id IS NULL AS churned_next_month\n", 798 | " FROM act_months AS prev\n", 799 | " LEFT JOIN act_months AS curr\n", 800 | " ON prev.user_id = curr.user_id\n", 801 | " AND prev.act_month = (curr.act_month - INTERVAL '1 MONTH'))\n", 802 | " \n", 803 | "SELECT\n", 804 | " churned_next_month,\n", 805 | " ROUND(AVG(age), 2) AS avg_age\n", 806 | "FROM churned\n", 807 | "JOIN user_data ON churned.user_id = user_data.user_id\n", 808 | "WHERE act_month = '2020-04-01'\n", 809 | "GROUP BY churned_next_month;" 810 | ], 811 | "execution_count": 0, 812 | "outputs": [] 813 | }, 814 | { 815 | "cell_type": "markdown", 816 | "metadata": { 817 | "id": "PPlyo9oF4XRg", 818 | "colab_type": "text" 819 | }, 820 | "source": [ 821 | "## **Q&A**" 822 | ] 823 | } 824 | ] 825 | } 826 | -------------------------------------------------------------------------------- /data/user_metadata.csv: -------------------------------------------------------------------------------- 1 | user_id,gender,age 2 | 0,GER,23 3 | 1,IND,23 4 | 2,IND,43 5 | 3,GER,22 6 | 4,JPN,47 7 | 5,GER,52 8 | 6,GER,46 9 | 7,GBR,59 10 | 8,JPN,22 11 | 9,CHN,30 12 | 10,GER,29 13 | 11,RUS,45 14 | 12,USA,49 15 | 13,IND,63 16 | 14,CHN,33 17 | 15,GBR,44 18 | 16,GER,41 19 | 17,RUS,55 20 | 18,GER,34 21 | 19,GER,19 22 | 20,IND,41 23 | 21,JPN,55 24 | 22,USA,36 25 | 23,FRA,26 26 | 24,FRA,23 27 | 25,FRA,18 28 | 26,FRA,28 29 | 27,CHN,30 30 | 28,IND,23 31 | 29,GER,47 32 | 30,IND,30 33 | 31,CHN,52 34 | 32,GER,58 35 | 33,FRA,19 36 | 34,CHN,51 37 | 35,IND,62 38 | 36,FRA,48 39 | 37,IND,54 40 | 38,FRA,61 41 | 39,CHN,42 42 | 40,RUS,60 43 | 41,RUS,34 44 | 42,GER,63 45 | 43,RUS,28 46 | 44,JPN,44 47 | 45,USA,35 48 | 46,USA,35 49 | 47,FRA,57 50 | 48,RUS,20 51 | 49,IND,29 52 | 50,USA,24 53 | 51,CHN,56 54 | 52,CHN,34 55 | 53,RUS,64 56 | 54,RUS,45 57 | 55,GER,41 58 | 56,RUS,59 59 | 57,GBR,44 60 | 58,CHN,54 61 | 59,GBR,22 62 | 60,JPN,30 63 | 61,FRA,26 64 | 62,IND,35 65 | 63,RUS,38 66 | 64,GBR,20 67 | 65,USA,61 68 | 66,RUS,32 69 | 67,GBR,31 70 | 68,JPN,36 71 | 69,GBR,43 72 | 70,USA,26 73 | 71,CHN,60 74 | 72,JPN,47 75 | 73,CHN,60 76 | 74,GER,45 77 | 75,USA,54 78 | 76,CHN,65 79 | 77,USA,33 80 | 78,GBR,53 81 | 79,FRA,34 82 | 80,RUS,40 83 | 81,GBR,30 84 | 82,CHN,41 85 | 83,RUS,28 86 | 84,IND,18 87 | 85,JPN,32 88 | 86,GER,39 89 | 87,GBR,44 90 | 88,GBR,30 91 | 89,USA,62 92 | 90,RUS,24 93 | 91,IND,42 94 | 92,CHN,62 95 | 93,CHN,61 96 | 94,IND,62 97 | 95,JPN,22 98 | 96,RUS,30 99 | 97,CHN,44 100 | 98,CHN,25 101 | 99,USA,41 102 | 100,FRA,29 103 | 101,JPN,49 104 | 102,USA,32 105 | 103,FRA,41 106 | 104,JPN,52 107 | 105,USA,31 108 | 106,FRA,21 109 | 107,USA,42 110 | 108,IND,23 111 | 109,GBR,64 112 | 110,FRA,36 113 | 111,RUS,47 114 | 112,CHN,22 115 | 113,GBR,27 116 | 114,CHN,52 117 | 115,GER,18 118 | 116,FRA,41 119 | 117,RUS,54 120 | 118,FRA,20 121 | 119,IND,18 122 | 120,FRA,19 123 | 121,RUS,49 124 | 122,GER,21 125 | 123,IND,51 126 | 124,IND,44 127 | 125,GBR,53 128 | 126,GBR,63 129 | 127,GBR,29 130 | 128,JPN,45 131 | 129,GBR,43 132 | 130,USA,46 133 | 131,CHN,24 134 | 132,USA,45 135 | 133,GBR,38 136 | 134,RUS,35 137 | 135,GBR,35 138 | 136,GER,31 139 | 137,FRA,52 140 | 138,IND,27 141 | 139,IND,46 142 | 140,JPN,61 143 | 141,RUS,37 144 | 142,IND,34 145 | 143,CHN,38 146 | 144,GBR,35 147 | 145,RUS,43 148 | 146,USA,20 149 | 147,RUS,34 150 | 148,IND,46 151 | 149,USA,28 152 | 150,GBR,41 153 | 151,GBR,41 154 | 152,GER,47 155 | 153,GER,51 156 | 154,RUS,47 157 | 155,IND,32 158 | 156,FRA,59 159 | 157,IND,56 160 | 158,FRA,61 161 | 159,CHN,34 162 | 160,GBR,22 163 | 161,FRA,58 164 | 162,JPN,52 165 | 163,GER,59 166 | 164,JPN,36 167 | 165,GBR,59 168 | 166,IND,64 169 | 167,CHN,49 170 | 168,IND,36 171 | 169,USA,45 172 | 170,CHN,53 173 | 171,JPN,29 174 | 172,GBR,35 175 | 173,FRA,44 176 | 174,JPN,49 177 | 175,FRA,37 178 | 176,GBR,24 179 | 177,GBR,56 180 | 178,CHN,63 181 | 179,USA,18 182 | 180,GBR,28 183 | 181,CHN,24 184 | 182,RUS,42 185 | 183,CHN,31 186 | 184,USA,45 187 | 185,JPN,23 188 | 186,USA,65 189 | 187,GER,63 190 | 188,FRA,34 191 | 189,GBR,43 192 | 190,CHN,38 193 | 191,CHN,52 194 | 192,USA,18 195 | 193,IND,30 196 | 194,JPN,59 197 | 195,GER,40 198 | 196,IND,33 199 | 197,USA,36 200 | 198,RUS,18 201 | 199,JPN,33 202 | 200,CHN,51 203 | 201,FRA,61 204 | 202,GBR,40 205 | 203,CHN,38 206 | 204,RUS,20 207 | 205,CHN,63 208 | 206,RUS,52 209 | 207,JPN,32 210 | 208,IND,41 211 | 209,FRA,22 212 | 210,RUS,51 213 | 211,RUS,36 214 | 212,IND,45 215 | 213,USA,48 216 | 214,JPN,31 217 | 215,GBR,59 218 | 216,USA,52 219 | 217,FRA,46 220 | 218,FRA,37 221 | 219,CHN,60 222 | 220,CHN,61 223 | 221,JPN,57 224 | 222,GER,49 225 | 223,JPN,25 226 | 224,CHN,18 227 | 225,USA,58 228 | 226,GER,63 229 | 227,RUS,58 230 | 228,CHN,34 231 | 229,IND,32 232 | 230,GBR,65 233 | 231,GER,22 234 | 232,FRA,49 235 | 233,IND,45 236 | 234,IND,62 237 | 235,RUS,20 238 | 236,GBR,48 239 | 237,JPN,31 240 | 238,IND,62 241 | 239,IND,38 242 | 240,CHN,21 243 | 241,CHN,38 244 | 242,CHN,31 245 | 243,RUS,54 246 | 244,CHN,47 247 | 245,FRA,57 248 | 246,IND,20 249 | 247,CHN,37 250 | 248,GER,26 251 | 249,GBR,64 252 | 250,IND,37 253 | 251,JPN,32 254 | 252,GER,22 255 | 253,FRA,55 256 | 254,GER,20 257 | 255,GBR,35 258 | 256,CHN,30 259 | 257,FRA,30 260 | 258,FRA,62 261 | 259,JPN,40 262 | 260,GBR,39 263 | 261,GBR,34 264 | 262,USA,54 265 | 263,USA,35 266 | 264,CHN,64 267 | 265,JPN,52 268 | 266,USA,39 269 | 267,CHN,32 270 | 268,RUS,39 271 | 269,USA,33 272 | 270,JPN,23 273 | 271,JPN,54 274 | 272,GBR,62 275 | 273,RUS,29 276 | 274,FRA,63 277 | 275,JPN,54 278 | 276,RUS,48 279 | 277,USA,18 280 | 278,CHN,26 281 | 279,GBR,59 282 | 280,GBR,20 283 | 281,GER,48 284 | 282,IND,64 285 | 283,CHN,61 286 | 284,JPN,29 287 | 285,GER,50 288 | 286,JPN,53 289 | 287,JPN,25 290 | 288,CHN,25 291 | 289,CHN,30 292 | 290,CHN,43 293 | 291,IND,64 294 | 292,IND,48 295 | 293,USA,34 296 | 294,JPN,63 297 | 295,GER,43 298 | 296,FRA,58 299 | 297,CHN,65 300 | 298,JPN,21 301 | 299,GBR,29 302 | 300,JPN,49 303 | 301,IND,45 304 | 302,IND,27 305 | 303,GBR,19 306 | 304,RUS,48 307 | 305,GER,23 308 | 306,CHN,27 309 | 307,GBR,58 310 | 308,USA,21 311 | 309,JPN,56 312 | 310,IND,40 313 | 311,FRA,63 314 | 312,GBR,54 315 | 313,CHN,42 316 | 314,CHN,39 317 | 315,GER,41 318 | 316,USA,55 319 | 317,FRA,41 320 | 318,IND,49 321 | 319,RUS,55 322 | 320,FRA,58 323 | 321,USA,55 324 | 322,RUS,52 325 | 323,IND,19 326 | 324,USA,20 327 | 325,FRA,37 328 | 326,GBR,53 329 | 327,IND,60 330 | 328,USA,58 331 | 329,GBR,53 332 | 330,IND,43 333 | 331,IND,54 334 | 332,CHN,50 335 | 333,FRA,37 336 | 334,RUS,64 337 | 335,CHN,32 338 | 336,CHN,46 339 | 337,CHN,54 340 | 338,JPN,27 341 | 339,IND,40 342 | 340,CHN,50 343 | 341,RUS,24 344 | 342,GBR,27 345 | 343,FRA,48 346 | 344,RUS,48 347 | 345,GER,65 348 | 346,USA,28 349 | 347,CHN,65 350 | 348,GBR,59 351 | 349,GER,31 352 | 350,GBR,61 353 | 351,GER,54 354 | 352,RUS,62 355 | 353,IND,62 356 | 354,USA,19 357 | 355,FRA,30 358 | 356,RUS,46 359 | 357,GBR,54 360 | 358,GER,22 361 | 359,GBR,39 362 | 360,JPN,43 363 | 361,RUS,32 364 | 362,IND,42 365 | 363,FRA,30 366 | 364,USA,53 367 | 365,RUS,53 368 | 366,CHN,64 369 | 367,RUS,54 370 | 368,JPN,65 371 | 369,USA,32 372 | 370,JPN,19 373 | 371,JPN,29 374 | 372,FRA,49 375 | 373,GER,43 376 | 374,IND,34 377 | 375,GBR,59 378 | 376,GBR,44 379 | 377,RUS,47 380 | 378,USA,40 381 | 379,RUS,19 382 | 380,USA,44 383 | 381,GBR,40 384 | 382,CHN,61 385 | 383,USA,38 386 | 384,RUS,37 387 | 385,RUS,63 388 | 386,IND,63 389 | 387,USA,41 390 | 388,USA,62 391 | 389,IND,43 392 | 390,IND,21 393 | 391,GBR,58 394 | 392,USA,18 395 | 393,USA,25 396 | 394,JPN,65 397 | 395,CHN,29 398 | 396,FRA,63 399 | 397,USA,59 400 | 398,IND,44 401 | 399,JPN,48 402 | 400,USA,53 403 | 401,IND,64 404 | 402,JPN,44 405 | 403,JPN,51 406 | 404,RUS,21 407 | 405,IND,34 408 | 406,RUS,41 409 | 407,RUS,27 410 | 408,FRA,42 411 | 409,JPN,27 412 | 410,GER,28 413 | 411,CHN,22 414 | 412,USA,38 415 | 413,GBR,52 416 | 414,RUS,29 417 | 415,CHN,37 418 | 416,JPN,52 419 | 417,IND,21 420 | 418,USA,39 421 | 419,GBR,61 422 | 420,JPN,39 423 | 421,FRA,60 424 | 422,GER,32 425 | 423,IND,61 426 | 424,JPN,39 427 | 425,IND,49 428 | 426,GBR,50 429 | 427,USA,39 430 | 428,GER,55 431 | 429,JPN,38 432 | 430,IND,59 433 | 431,USA,39 434 | 432,IND,32 435 | 433,FRA,54 436 | 434,JPN,41 437 | 435,CHN,30 438 | 436,GBR,60 439 | 437,JPN,23 440 | 438,JPN,19 441 | 439,JPN,61 442 | 440,FRA,38 443 | 441,GER,42 444 | 442,IND,37 445 | 443,GBR,20 446 | 444,GER,29 447 | 445,USA,57 448 | 446,USA,47 449 | 447,GBR,31 450 | 448,IND,61 451 | 449,FRA,34 452 | 450,RUS,25 453 | 451,IND,21 454 | 452,IND,31 455 | 453,JPN,63 456 | 454,CHN,46 457 | 455,GBR,28 458 | 456,RUS,60 459 | 457,RUS,48 460 | 458,GER,46 461 | 459,CHN,60 462 | 460,GBR,42 463 | 461,USA,45 464 | 462,CHN,56 465 | 463,IND,62 466 | 464,GER,56 467 | 465,JPN,25 468 | 466,USA,43 469 | 467,FRA,58 470 | 468,JPN,45 471 | 469,GBR,28 472 | 470,GER,56 473 | 471,USA,28 474 | 472,JPN,59 475 | 473,GER,60 476 | 474,USA,43 477 | 475,IND,24 478 | 476,RUS,25 479 | 477,GER,49 480 | 478,IND,38 481 | 479,CHN,64 482 | 480,USA,40 483 | 481,RUS,36 484 | 482,RUS,22 485 | 483,GER,25 486 | 484,GBR,48 487 | 485,GBR,59 488 | 486,CHN,52 489 | 487,RUS,62 490 | 488,FRA,30 491 | 489,RUS,43 492 | 490,IND,54 493 | 491,FRA,62 494 | 492,FRA,54 495 | 493,RUS,34 496 | 494,IND,22 497 | 495,GER,35 498 | 496,GER,50 499 | 497,FRA,27 500 | 498,FRA,52 501 | 499,RUS,47 502 | 500,USA,50 503 | 501,CHN,61 504 | 502,GBR,33 505 | 503,RUS,60 506 | 504,USA,63 507 | 505,CHN,42 508 | 506,JPN,39 509 | 507,JPN,42 510 | 508,USA,32 511 | 509,CHN,36 512 | 510,JPN,30 513 | 511,GER,31 514 | 512,FRA,63 515 | 513,USA,37 516 | 514,IND,33 517 | 515,CHN,55 518 | 516,RUS,53 519 | 517,JPN,36 520 | 518,CHN,51 521 | 519,JPN,44 522 | 520,GBR,49 523 | 521,JPN,22 524 | 522,GER,64 525 | 523,GER,55 526 | 524,CHN,63 527 | 525,GBR,48 528 | 526,GER,54 529 | 527,RUS,31 530 | 528,RUS,32 531 | 529,IND,60 532 | 530,IND,32 533 | 531,GBR,60 534 | 532,IND,44 535 | 533,GBR,32 536 | 534,CHN,51 537 | 535,JPN,50 538 | 536,GBR,28 539 | 537,USA,65 540 | 538,RUS,21 541 | 539,GER,37 542 | 540,JPN,58 543 | 541,USA,58 544 | 542,JPN,31 545 | 543,USA,25 546 | 544,JPN,30 547 | 545,IND,18 548 | 546,GBR,61 549 | 547,RUS,38 550 | 548,GER,21 551 | 549,CHN,35 552 | 550,GER,60 553 | 551,IND,48 554 | 552,USA,42 555 | 553,IND,32 556 | 554,GER,58 557 | 555,GBR,31 558 | 556,IND,54 559 | 557,GBR,48 560 | 558,GER,41 561 | 559,IND,63 562 | 560,FRA,43 563 | 561,GER,42 564 | 562,JPN,31 565 | 563,FRA,38 566 | 564,CHN,31 567 | 565,IND,37 568 | 566,RUS,31 569 | 567,RUS,49 570 | 568,USA,59 571 | 569,RUS,64 572 | 570,USA,18 573 | 571,CHN,32 574 | 572,CHN,21 575 | 573,RUS,20 576 | 574,GER,51 577 | 575,GBR,32 578 | 576,CHN,40 579 | 577,GBR,57 580 | 578,FRA,53 581 | 579,IND,56 582 | 580,GBR,27 583 | 581,JPN,50 584 | 582,RUS,35 585 | 583,IND,57 586 | 584,FRA,42 587 | 585,GER,61 588 | 586,USA,37 589 | 587,RUS,55 590 | 588,USA,52 591 | 589,JPN,25 592 | 590,CHN,19 593 | 591,GER,50 594 | 592,GER,34 595 | 593,IND,36 596 | 594,GER,53 597 | 595,CHN,52 598 | 596,JPN,21 599 | 597,FRA,41 600 | 598,GER,39 601 | 599,GBR,57 602 | 600,GBR,34 603 | 601,JPN,60 604 | 602,GBR,56 605 | 603,USA,26 606 | 604,USA,45 607 | 605,CHN,65 608 | 606,USA,61 609 | 607,USA,43 610 | 608,CHN,31 611 | 609,USA,44 612 | 610,FRA,42 613 | 611,USA,62 614 | 612,GER,55 615 | 613,CHN,41 616 | 614,USA,63 617 | 615,USA,31 618 | 616,USA,36 619 | 617,RUS,47 620 | 618,RUS,20 621 | 619,FRA,32 622 | 620,IND,63 623 | 621,FRA,20 624 | 622,RUS,29 625 | 623,FRA,53 626 | 624,JPN,56 627 | 625,IND,63 628 | 626,USA,46 629 | 627,USA,37 630 | 628,JPN,61 631 | 629,JPN,50 632 | 630,GER,25 633 | 631,GBR,63 634 | 632,IND,20 635 | 633,GBR,58 636 | 634,JPN,31 637 | 635,GER,53 638 | 636,CHN,52 639 | 637,RUS,56 640 | 638,USA,33 641 | 639,JPN,37 642 | 640,IND,34 643 | 641,CHN,27 644 | 642,GBR,47 645 | 643,CHN,31 646 | 644,CHN,27 647 | 645,JPN,61 648 | 646,RUS,26 649 | 647,USA,46 650 | 648,GER,40 651 | 649,IND,43 652 | 650,CHN,37 653 | 651,USA,29 654 | 652,IND,61 655 | 653,CHN,55 656 | 654,RUS,53 657 | 655,RUS,36 658 | 656,IND,23 659 | 657,JPN,38 660 | 658,RUS,42 661 | 659,GBR,34 662 | 660,FRA,35 663 | 661,GBR,38 664 | 662,RUS,41 665 | 663,IND,53 666 | 664,RUS,60 667 | 665,IND,25 668 | 666,IND,47 669 | 667,IND,64 670 | 668,FRA,62 671 | 669,CHN,59 672 | 670,USA,44 673 | 671,CHN,23 674 | 672,RUS,39 675 | 673,RUS,23 676 | 674,CHN,45 677 | 675,JPN,27 678 | 676,RUS,35 679 | 677,GBR,63 680 | 678,IND,60 681 | 679,FRA,37 682 | 680,CHN,43 683 | 681,RUS,49 684 | 682,USA,41 685 | 683,RUS,52 686 | 684,IND,24 687 | 685,GER,36 688 | 686,IND,42 689 | 687,IND,65 690 | 688,GBR,64 691 | 689,FRA,52 692 | 690,GER,48 693 | 691,IND,49 694 | 692,CHN,34 695 | 693,GBR,61 696 | 694,GER,45 697 | 695,FRA,65 698 | 696,FRA,56 699 | 697,GBR,57 700 | 698,GBR,50 701 | 699,USA,60 702 | 700,JPN,47 703 | 701,GER,22 704 | 702,JPN,36 705 | 703,GER,59 706 | 704,RUS,46 707 | 705,JPN,48 708 | 706,GBR,39 709 | 707,CHN,38 710 | 708,GBR,36 711 | 709,JPN,49 712 | 710,IND,48 713 | 711,JPN,37 714 | 712,USA,28 715 | 713,JPN,28 716 | 714,GBR,55 717 | 715,FRA,48 718 | 716,GBR,26 719 | 717,RUS,18 720 | 718,USA,46 721 | 719,USA,42 722 | 720,JPN,41 723 | 721,FRA,33 724 | 722,RUS,39 725 | 723,USA,61 726 | 724,USA,19 727 | 725,USA,32 728 | 726,GBR,30 729 | 727,JPN,42 730 | 728,GBR,25 731 | 729,JPN,56 732 | 730,GER,32 733 | 731,JPN,37 734 | 732,GER,23 735 | 733,CHN,22 736 | 734,CHN,18 737 | 735,JPN,34 738 | 736,IND,61 739 | 737,GBR,29 740 | 738,GBR,36 741 | 739,RUS,32 742 | 740,RUS,25 743 | 741,CHN,21 744 | 742,GER,19 745 | 743,USA,57 746 | 744,JPN,62 747 | 745,CHN,35 748 | 746,IND,41 749 | 747,RUS,27 750 | 748,USA,38 751 | 749,JPN,31 752 | 750,JPN,35 753 | 751,GER,56 754 | 752,IND,56 755 | 753,CHN,28 756 | 754,CHN,57 757 | 755,IND,43 758 | 756,IND,61 759 | 757,IND,26 760 | 758,CHN,26 761 | 759,CHN,18 762 | 760,RUS,40 763 | 761,JPN,49 764 | 762,CHN,47 765 | 763,CHN,59 766 | 764,JPN,48 767 | 765,RUS,54 768 | 766,RUS,29 769 | 767,GER,47 770 | 768,GBR,24 771 | 769,IND,44 772 | 770,USA,25 773 | 771,GER,25 774 | 772,FRA,29 775 | 773,IND,42 776 | 774,JPN,61 777 | 775,FRA,42 778 | 776,JPN,21 779 | 777,IND,21 780 | 778,GBR,19 781 | 779,JPN,39 782 | 780,JPN,43 783 | 781,USA,58 784 | 782,FRA,56 785 | 783,JPN,23 786 | 784,JPN,36 787 | 785,GBR,34 788 | 786,CHN,37 789 | 787,IND,29 790 | 788,GER,40 791 | 789,USA,19 792 | 790,GER,23 793 | 791,CHN,43 794 | 792,GER,52 795 | 793,GER,53 796 | 794,IND,20 797 | 795,GER,59 798 | 796,GBR,48 799 | 797,IND,24 800 | 798,GER,20 801 | 799,CHN,27 802 | 800,GBR,36 803 | 801,USA,45 804 | 802,USA,43 805 | 803,CHN,43 806 | 804,CHN,29 807 | 805,USA,43 808 | 806,FRA,53 809 | 807,GER,45 810 | 808,RUS,57 811 | 809,RUS,23 812 | 810,CHN,37 813 | 811,JPN,59 814 | 812,JPN,32 815 | 813,IND,54 816 | 814,JPN,53 817 | 815,GBR,64 818 | 816,JPN,45 819 | 817,CHN,54 820 | 818,JPN,43 821 | 819,GER,37 822 | 820,CHN,19 823 | 821,GER,35 824 | 822,GER,26 825 | 823,GER,42 826 | 824,IND,33 827 | 825,JPN,33 828 | 826,JPN,32 829 | 827,JPN,51 830 | 828,USA,33 831 | 829,USA,36 832 | 830,USA,62 833 | 831,USA,39 834 | 832,USA,55 835 | 833,USA,42 836 | 834,GBR,28 837 | 835,IND,36 838 | 836,USA,25 839 | 837,RUS,63 840 | 838,USA,62 841 | 839,CHN,18 842 | 840,RUS,48 843 | 841,GER,42 844 | 842,GBR,49 845 | 843,FRA,19 846 | 844,USA,60 847 | 845,GER,65 848 | 846,GBR,58 849 | 847,FRA,22 850 | 848,CHN,47 851 | 849,JPN,56 852 | 850,CHN,22 853 | 851,CHN,29 854 | 852,GBR,21 855 | 853,IND,34 856 | 854,JPN,24 857 | 855,GBR,40 858 | 856,USA,25 859 | 857,IND,23 860 | 858,USA,50 861 | 859,IND,24 862 | 860,FRA,35 863 | 861,IND,18 864 | 862,IND,64 865 | 863,CHN,20 866 | 864,USA,24 867 | 865,FRA,50 868 | 866,CHN,30 869 | 867,IND,42 870 | 868,USA,49 871 | 869,USA,60 872 | 870,GER,31 873 | 871,GBR,56 874 | 872,GER,19 875 | 873,IND,63 876 | 874,CHN,55 877 | 875,GBR,38 878 | 876,GER,41 879 | 877,GBR,58 880 | 878,GBR,65 881 | 879,JPN,64 882 | 880,USA,25 883 | 881,GER,49 884 | 882,GBR,36 885 | 883,IND,47 886 | 884,JPN,28 887 | 885,RUS,63 888 | 886,IND,23 889 | 887,IND,25 890 | 888,USA,60 891 | 889,USA,29 892 | 890,USA,63 893 | 891,JPN,30 894 | 892,GER,49 895 | 893,FRA,50 896 | 894,IND,33 897 | 895,USA,55 898 | 896,USA,65 899 | 897,FRA,47 900 | 898,GBR,34 901 | 899,JPN,36 902 | 900,RUS,40 903 | 901,GER,27 904 | 902,JPN,30 905 | 903,CHN,33 906 | 904,CHN,46 907 | 905,CHN,47 908 | 906,FRA,52 909 | 907,RUS,44 910 | 908,FRA,48 911 | 909,RUS,25 912 | 910,GER,32 913 | 911,CHN,21 914 | 912,GBR,25 915 | 913,GER,29 916 | 914,FRA,51 917 | 915,RUS,48 918 | 916,GBR,21 919 | 917,JPN,56 920 | 918,GER,20 921 | 919,RUS,28 922 | 920,IND,53 923 | 921,GER,27 924 | 922,USA,37 925 | 923,RUS,61 926 | 924,GBR,21 927 | 925,FRA,23 928 | 926,JPN,65 929 | 927,RUS,42 930 | 928,CHN,21 931 | 929,GBR,52 932 | 930,IND,42 933 | 931,GER,37 934 | 932,USA,35 935 | 933,CHN,44 936 | 934,FRA,44 937 | 935,IND,60 938 | 936,GBR,49 939 | 937,GBR,53 940 | 938,GBR,21 941 | 939,RUS,38 942 | 940,CHN,56 943 | 941,CHN,35 944 | 942,GBR,23 945 | 943,JPN,45 946 | 944,JPN,45 947 | 945,GER,64 948 | 946,FRA,38 949 | 947,GER,24 950 | 948,GER,39 951 | 949,IND,51 952 | 950,JPN,36 953 | 951,USA,25 954 | 952,GER,51 955 | 953,JPN,45 956 | 954,JPN,36 957 | 955,GER,40 958 | 956,RUS,42 959 | 957,USA,27 960 | 958,CHN,25 961 | 959,GER,35 962 | 960,IND,64 963 | 961,GER,40 964 | 962,JPN,34 965 | 963,FRA,26 966 | 964,IND,47 967 | 965,JPN,24 968 | 966,RUS,21 969 | 967,USA,30 970 | 968,RUS,29 971 | 969,RUS,39 972 | 970,GER,32 973 | 971,IND,62 974 | 972,USA,28 975 | 973,GBR,43 976 | 974,FRA,40 977 | 975,JPN,65 978 | 976,FRA,37 979 | 977,RUS,49 980 | 978,GBR,51 981 | 979,JPN,30 982 | 980,JPN,46 983 | 981,JPN,18 984 | 982,IND,39 985 | 983,JPN,39 986 | 984,FRA,39 987 | 985,IND,65 988 | 986,GER,57 989 | 987,JPN,56 990 | 988,GBR,61 991 | 989,IND,22 992 | 990,FRA,57 993 | 991,FRA,25 994 | 992,FRA,36 995 | 993,CHN,54 996 | 994,JPN,58 997 | 995,GBR,24 998 | 996,IND,56 999 | 997,GER,64 1000 | 998,JPN,50 1001 | 999,FRA,62 1002 | 1000,RUS,19 1003 | 1001,CHN,21 1004 | 1002,JPN,53 1005 | 1003,CHN,26 1006 | 1004,JPN,21 1007 | 1005,GER,57 1008 | 1006,IND,50 1009 | 1007,USA,56 1010 | 1008,GER,20 1011 | 1009,RUS,52 1012 | 1010,FRA,18 1013 | 1011,GER,33 1014 | 1012,IND,45 1015 | 1013,GBR,43 1016 | 1014,FRA,54 1017 | 1015,USA,35 1018 | 1016,USA,61 1019 | 1017,GBR,25 1020 | 1018,RUS,48 1021 | 1019,FRA,57 1022 | 1020,IND,20 1023 | 1021,GBR,51 1024 | 1022,RUS,60 1025 | 1023,RUS,30 1026 | 1024,GER,27 1027 | 1025,FRA,58 1028 | 1026,USA,24 1029 | 1027,IND,61 1030 | 1028,GER,60 1031 | 1029,RUS,49 1032 | 1030,IND,64 1033 | 1031,USA,25 1034 | 1032,GER,56 1035 | 1033,IND,46 1036 | 1034,GBR,41 1037 | 1035,GER,34 1038 | 1036,GBR,33 1039 | 1037,IND,24 1040 | 1038,RUS,41 1041 | 1039,IND,58 1042 | 1040,CHN,31 1043 | 1041,JPN,31 1044 | 1042,GER,18 1045 | 1043,IND,46 1046 | 1044,JPN,40 1047 | 1045,CHN,21 1048 | 1046,GBR,47 1049 | 1047,CHN,28 1050 | 1048,JPN,50 1051 | 1049,GBR,33 1052 | 1050,RUS,29 1053 | 1051,RUS,29 1054 | 1052,USA,20 1055 | 1053,FRA,27 1056 | 1054,IND,36 1057 | 1055,GER,32 1058 | 1056,CHN,52 1059 | 1057,GBR,24 1060 | 1058,USA,43 1061 | 1059,RUS,36 1062 | 1060,GER,45 1063 | 1061,IND,26 1064 | 1062,RUS,33 1065 | 1063,FRA,32 1066 | 1064,USA,23 1067 | 1065,GER,39 1068 | 1066,GBR,36 1069 | 1067,JPN,65 1070 | 1068,JPN,31 1071 | 1069,USA,27 1072 | 1070,JPN,29 1073 | 1071,USA,38 1074 | 1072,RUS,60 1075 | 1073,FRA,58 1076 | 1074,FRA,47 1077 | 1075,FRA,24 1078 | 1076,GER,55 1079 | 1077,RUS,26 1080 | 1078,USA,36 1081 | 1079,USA,60 1082 | 1080,USA,58 1083 | 1081,CHN,65 1084 | 1082,USA,64 1085 | 1083,USA,38 1086 | 1084,GER,64 1087 | 1085,USA,54 1088 | 1086,CHN,23 1089 | 1087,JPN,21 1090 | 1088,USA,59 1091 | 1089,GER,38 1092 | 1090,USA,65 1093 | 1091,IND,52 1094 | 1092,GER,24 1095 | 1093,FRA,64 1096 | 1094,JPN,40 1097 | 1095,GBR,43 1098 | 1096,IND,41 1099 | 1097,FRA,33 1100 | 1098,RUS,63 1101 | 1099,GBR,40 1102 | 1100,JPN,50 1103 | 1101,GER,44 1104 | 1102,RUS,64 1105 | 1103,FRA,59 1106 | 1104,IND,18 1107 | 1105,JPN,51 1108 | 1106,USA,61 1109 | 1107,IND,23 1110 | 1108,CHN,36 1111 | 1109,RUS,21 1112 | 1110,CHN,25 1113 | 1111,JPN,46 1114 | 1112,CHN,21 1115 | 1113,IND,19 1116 | 1114,RUS,49 1117 | 1115,USA,26 1118 | 1116,FRA,36 1119 | 1117,GBR,28 1120 | 1118,IND,39 1121 | 1119,FRA,27 1122 | 1120,RUS,47 1123 | 1121,IND,23 1124 | 1122,JPN,24 1125 | 1123,GBR,61 1126 | 1124,JPN,30 1127 | 1125,GER,49 1128 | 1126,CHN,28 1129 | 1127,IND,53 1130 | 1128,USA,60 1131 | 1129,JPN,42 1132 | 1130,IND,26 1133 | 1131,CHN,26 1134 | 1132,GER,38 1135 | 1133,GER,50 1136 | 1134,FRA,19 1137 | 1135,GBR,62 1138 | 1136,FRA,40 1139 | 1137,USA,26 1140 | 1138,CHN,34 1141 | 1139,GER,47 1142 | 1140,USA,61 1143 | 1141,RUS,29 1144 | 1142,RUS,37 1145 | 1143,JPN,39 1146 | 1144,RUS,61 1147 | 1145,USA,35 1148 | 1146,GER,32 1149 | 1147,JPN,27 1150 | 1148,JPN,27 1151 | 1149,IND,58 1152 | 1150,GBR,47 1153 | 1151,FRA,47 1154 | 1152,GBR,20 1155 | 1153,FRA,38 1156 | 1154,GBR,65 1157 | 1155,IND,62 1158 | 1156,CHN,18 1159 | 1157,IND,60 1160 | 1158,IND,49 1161 | 1159,GER,18 1162 | 1160,GBR,57 1163 | 1161,CHN,42 1164 | 1162,GER,49 1165 | 1163,GER,29 1166 | 1164,RUS,27 1167 | 1165,CHN,41 1168 | 1166,GER,36 1169 | 1167,JPN,45 1170 | 1168,RUS,27 1171 | 1169,GER,36 1172 | 1170,IND,43 1173 | 1171,JPN,57 1174 | 1172,CHN,34 1175 | 1173,GER,54 1176 | 1174,GBR,36 1177 | 1175,GER,58 1178 | 1176,GER,58 1179 | 1177,IND,53 1180 | 1178,RUS,23 1181 | 1179,RUS,36 1182 | 1180,GER,44 1183 | 1181,JPN,23 1184 | 1182,GER,44 1185 | 1183,USA,56 1186 | 1184,JPN,18 1187 | 1185,CHN,55 1188 | 1186,JPN,65 1189 | 1187,GBR,40 1190 | 1188,GBR,27 1191 | 1189,JPN,52 1192 | 1190,CHN,29 1193 | 1191,JPN,40 1194 | 1192,FRA,64 1195 | 1193,GER,44 1196 | 1194,IND,37 1197 | 1195,USA,39 1198 | 1196,IND,41 1199 | 1197,JPN,21 1200 | 1198,FRA,62 1201 | 1199,IND,56 1202 | 1200,RUS,23 1203 | 1201,RUS,52 1204 | 1202,USA,49 1205 | 1203,GBR,19 1206 | 1204,USA,28 1207 | 1205,GBR,40 1208 | 1206,GBR,27 1209 | 1207,GBR,59 1210 | 1208,JPN,58 1211 | 1209,USA,62 1212 | 1210,GER,49 1213 | 1211,RUS,54 1214 | 1212,JPN,31 1215 | 1213,FRA,42 1216 | 1214,JPN,59 1217 | 1215,GER,32 1218 | 1216,FRA,21 1219 | 1217,USA,65 1220 | 1218,GER,48 1221 | 1219,GBR,30 1222 | 1220,USA,18 1223 | 1221,IND,28 1224 | 1222,CHN,20 1225 | 1223,RUS,58 1226 | 1224,GBR,29 1227 | 1225,USA,58 1228 | 1226,USA,22 1229 | 1227,GER,58 1230 | 1228,RUS,62 1231 | 1229,GER,48 1232 | 1230,GER,47 1233 | 1231,JPN,26 1234 | 1232,GER,43 1235 | 1233,GBR,51 1236 | 1234,USA,52 1237 | 1235,FRA,34 1238 | 1236,JPN,22 1239 | 1237,IND,27 1240 | 1238,RUS,45 1241 | 1239,JPN,29 1242 | 1240,FRA,62 1243 | 1241,RUS,58 1244 | 1242,IND,29 1245 | 1243,JPN,37 1246 | 1244,GER,31 1247 | 1245,IND,49 1248 | 1246,JPN,51 1249 | 1247,RUS,23 1250 | 1248,RUS,57 1251 | 1249,IND,57 1252 | 1250,IND,25 1253 | 1251,IND,24 1254 | 1252,USA,28 1255 | 1253,JPN,22 1256 | 1254,RUS,40 1257 | 1255,GBR,21 1258 | 1256,FRA,22 1259 | 1257,RUS,45 1260 | 1258,JPN,56 1261 | 1259,CHN,21 1262 | 1260,RUS,29 1263 | 1261,GER,52 1264 | 1262,IND,34 1265 | 1263,IND,64 1266 | 1264,GER,36 1267 | 1265,FRA,28 1268 | 1266,GER,39 1269 | 1267,GBR,64 1270 | 1268,JPN,24 1271 | 1269,GER,36 1272 | 1270,RUS,29 1273 | 1271,USA,21 1274 | 1272,CHN,28 1275 | 1273,CHN,64 1276 | 1274,IND,37 1277 | 1275,IND,24 1278 | 1276,IND,56 1279 | 1277,GBR,39 1280 | 1278,RUS,34 1281 | 1279,USA,49 1282 | 1280,IND,55 1283 | 1281,JPN,48 1284 | 1282,GER,29 1285 | 1283,USA,43 1286 | 1284,JPN,32 1287 | 1285,RUS,49 1288 | 1286,IND,18 1289 | 1287,GBR,34 1290 | 1288,GER,51 1291 | 1289,GER,21 1292 | 1290,USA,55 1293 | 1291,RUS,31 1294 | 1292,JPN,27 1295 | 1293,CHN,57 1296 | 1294,GBR,56 1297 | 1295,JPN,55 1298 | 1296,USA,27 1299 | 1297,FRA,46 1300 | 1298,RUS,50 1301 | 1299,FRA,36 1302 | 1300,FRA,40 1303 | 1301,FRA,53 1304 | 1302,RUS,45 1305 | 1303,JPN,50 1306 | 1304,RUS,51 1307 | 1305,FRA,21 1308 | 1306,IND,62 1309 | 1307,USA,36 1310 | 1308,FRA,24 1311 | 1309,CHN,51 1312 | 1310,FRA,34 1313 | 1311,USA,36 1314 | 1312,GER,18 1315 | 1313,JPN,36 1316 | 1314,IND,62 1317 | 1315,FRA,50 1318 | 1316,CHN,45 1319 | 1317,CHN,62 1320 | 1318,GER,56 1321 | 1319,JPN,39 1322 | 1320,GBR,60 1323 | 1321,IND,58 1324 | 1322,USA,50 1325 | 1323,FRA,33 1326 | 1324,GBR,63 1327 | 1325,RUS,51 1328 | 1326,IND,30 1329 | 1327,GER,44 1330 | 1328,FRA,54 1331 | 1329,GER,65 1332 | 1330,GER,47 1333 | 1331,IND,59 1334 | 1332,FRA,19 1335 | 1333,IND,57 1336 | 1334,FRA,65 1337 | 1335,GER,53 1338 | 1336,RUS,53 1339 | 1337,GER,53 1340 | 1338,USA,64 1341 | 1339,IND,20 1342 | 1340,GBR,22 1343 | 1341,FRA,42 1344 | 1342,JPN,53 1345 | 1343,GBR,23 1346 | 1344,GBR,49 1347 | 1345,JPN,27 1348 | 1346,USA,31 1349 | 1347,RUS,40 1350 | 1348,GBR,38 1351 | 1349,JPN,51 1352 | 1350,USA,60 1353 | 1351,IND,27 1354 | 1352,GER,59 1355 | 1353,IND,53 1356 | 1354,RUS,25 1357 | 1355,CHN,21 1358 | 1356,IND,56 1359 | 1357,IND,33 1360 | 1358,USA,52 1361 | 1359,FRA,38 1362 | 1360,GER,61 1363 | 1361,GER,48 1364 | 1362,FRA,25 1365 | 1363,JPN,25 1366 | 1364,USA,23 1367 | 1365,JPN,63 1368 | 1366,USA,47 1369 | 1367,CHN,57 1370 | 1368,JPN,31 1371 | 1369,CHN,61 1372 | 1370,USA,27 1373 | 1371,RUS,50 1374 | 1372,JPN,55 1375 | 1373,USA,25 1376 | 1374,USA,65 1377 | 1375,RUS,34 1378 | 1376,USA,39 1379 | 1377,RUS,59 1380 | 1378,RUS,25 1381 | 1379,JPN,62 1382 | 1380,RUS,20 1383 | 1381,JPN,65 1384 | 1382,IND,57 1385 | 1383,GBR,20 1386 | 1384,GER,60 1387 | 1385,CHN,20 1388 | 1386,IND,51 1389 | 1387,RUS,57 1390 | 1388,IND,33 1391 | 1389,IND,48 1392 | 1390,RUS,58 1393 | 1391,USA,20 1394 | 1392,RUS,37 1395 | 1393,RUS,58 1396 | 1394,GER,21 1397 | 1395,IND,64 1398 | 1396,GBR,29 1399 | 1397,GER,64 1400 | 1398,JPN,64 1401 | 1399,GER,19 1402 | 1400,IND,27 1403 | 1401,FRA,49 1404 | 1402,GER,19 1405 | 1403,USA,26 1406 | 1404,CHN,24 1407 | 1405,IND,50 1408 | 1406,GBR,18 1409 | 1407,GBR,40 1410 | 1408,IND,26 1411 | 1409,GER,51 1412 | 1410,RUS,51 1413 | 1411,JPN,48 1414 | 1412,GBR,40 1415 | 1413,JPN,30 1416 | 1414,GBR,47 1417 | 1415,CHN,30 1418 | 1416,FRA,40 1419 | 1417,RUS,43 1420 | 1418,JPN,58 1421 | 1419,JPN,59 1422 | 1420,USA,48 1423 | 1421,RUS,30 1424 | 1422,JPN,32 1425 | 1423,GER,32 1426 | 1424,IND,28 1427 | 1425,JPN,45 1428 | 1426,JPN,23 1429 | 1427,RUS,47 1430 | 1428,GBR,54 1431 | 1429,GBR,60 1432 | 1430,CHN,37 1433 | 1431,FRA,23 1434 | 1432,GBR,52 1435 | 1433,USA,44 1436 | 1434,CHN,40 1437 | 1435,GBR,65 1438 | 1436,JPN,31 1439 | 1437,RUS,48 1440 | 1438,GBR,36 1441 | 1439,GBR,29 1442 | 1440,IND,49 1443 | 1441,USA,25 1444 | 1442,IND,58 1445 | 1443,IND,27 1446 | 1444,JPN,60 1447 | 1445,RUS,33 1448 | 1446,IND,39 1449 | 1447,CHN,59 1450 | 1448,FRA,32 1451 | 1449,CHN,33 1452 | 1450,CHN,27 1453 | 1451,GER,46 1454 | 1452,CHN,57 1455 | 1453,IND,53 1456 | 1454,JPN,43 1457 | 1455,JPN,59 1458 | 1456,FRA,44 1459 | 1457,GBR,38 1460 | 1458,USA,58 1461 | 1459,JPN,45 1462 | 1460,CHN,49 1463 | 1461,GER,38 1464 | 1462,GER,44 1465 | 1463,CHN,32 1466 | 1464,RUS,46 1467 | 1465,GER,49 1468 | 1466,USA,46 1469 | 1467,CHN,32 1470 | 1468,GBR,59 1471 | 1469,GER,48 1472 | 1470,RUS,53 1473 | 1471,JPN,20 1474 | 1472,FRA,32 1475 | 1473,GER,59 1476 | 1474,CHN,19 1477 | 1475,GER,62 1478 | 1476,JPN,52 1479 | 1477,GER,48 1480 | 1478,RUS,53 1481 | 1479,JPN,60 1482 | 1480,FRA,21 1483 | 1481,GER,57 1484 | 1482,USA,30 1485 | 1483,CHN,29 1486 | 1484,FRA,18 1487 | 1485,FRA,20 1488 | 1486,IND,21 1489 | 1487,USA,45 1490 | 1488,CHN,55 1491 | 1489,FRA,53 1492 | 1490,FRA,24 1493 | 1491,GBR,18 1494 | 1492,GER,56 1495 | 1493,GBR,55 1496 | 1494,RUS,45 1497 | 1495,GBR,34 1498 | 1496,GBR,38 1499 | 1497,JPN,50 1500 | 1498,GBR,49 1501 | 1499,CHN,60 1502 | 1500,GER,28 1503 | 1501,CHN,36 1504 | 1502,GBR,44 1505 | 1503,GER,50 1506 | 1504,IND,57 1507 | 1505,CHN,44 1508 | 1506,FRA,29 1509 | 1507,RUS,31 1510 | 1508,GBR,48 1511 | 1509,CHN,39 1512 | 1510,USA,28 1513 | 1511,FRA,37 1514 | 1512,FRA,63 1515 | 1513,IND,62 1516 | 1514,GBR,37 1517 | 1515,USA,26 1518 | 1516,IND,43 1519 | 1517,GBR,19 1520 | 1518,USA,28 1521 | 1519,FRA,56 1522 | 1520,IND,63 1523 | 1521,FRA,42 1524 | 1522,RUS,37 1525 | 1523,GER,63 1526 | 1524,JPN,21 1527 | 1525,GER,54 1528 | 1526,GER,55 1529 | 1527,JPN,51 1530 | 1528,JPN,47 1531 | 1529,RUS,19 1532 | 1530,RUS,20 1533 | 1531,RUS,59 1534 | 1532,GBR,40 1535 | 1533,USA,28 1536 | 1534,CHN,18 1537 | 1535,USA,50 1538 | 1536,RUS,19 1539 | 1537,CHN,62 1540 | 1538,RUS,32 1541 | 1539,JPN,44 1542 | 1540,JPN,43 1543 | 1541,JPN,38 1544 | 1542,CHN,34 1545 | 1543,JPN,18 1546 | 1544,RUS,64 1547 | 1545,RUS,55 1548 | 1546,GBR,62 1549 | 1547,USA,35 1550 | 1548,CHN,25 1551 | 1549,JPN,44 1552 | 1550,GER,19 1553 | 1551,GBR,61 1554 | 1552,GBR,33 1555 | 1553,IND,20 1556 | 1554,GER,26 1557 | 1555,FRA,48 1558 | 1556,GBR,19 1559 | 1557,USA,45 1560 | 1558,RUS,31 1561 | 1559,GER,41 1562 | 1560,IND,32 1563 | 1561,CHN,18 1564 | 1562,IND,27 1565 | 1563,RUS,59 1566 | 1564,JPN,38 1567 | 1565,JPN,57 1568 | 1566,JPN,35 1569 | 1567,IND,31 1570 | 1568,FRA,55 1571 | 1569,JPN,60 1572 | 1570,USA,30 1573 | 1571,IND,54 1574 | 1572,RUS,19 1575 | 1573,FRA,29 1576 | 1574,RUS,33 1577 | 1575,USA,26 1578 | 1576,IND,49 1579 | 1577,GBR,40 1580 | 1578,IND,27 1581 | 1579,USA,32 1582 | 1580,GER,25 1583 | 1581,RUS,42 1584 | 1582,RUS,53 1585 | 1583,GBR,36 1586 | 1584,USA,32 1587 | 1585,JPN,48 1588 | 1586,CHN,37 1589 | 1587,GBR,47 1590 | 1588,GER,47 1591 | 1589,USA,26 1592 | 1590,IND,18 1593 | 1591,FRA,51 1594 | 1592,CHN,64 1595 | 1593,GBR,61 1596 | 1594,GBR,60 1597 | 1595,GBR,41 1598 | 1596,IND,50 1599 | 1597,CHN,23 1600 | 1598,GBR,58 1601 | 1599,IND,44 1602 | 1600,USA,41 1603 | 1601,USA,38 1604 | 1602,GBR,43 1605 | 1603,IND,24 1606 | 1604,CHN,23 1607 | 1605,GBR,58 1608 | 1606,IND,39 1609 | 1607,CHN,23 1610 | 1608,FRA,60 1611 | 1609,JPN,63 1612 | 1610,USA,31 1613 | 1611,CHN,47 1614 | 1612,GBR,37 1615 | 1613,IND,62 1616 | 1614,GER,28 1617 | 1615,IND,19 1618 | 1616,IND,38 1619 | 1617,FRA,21 1620 | 1618,USA,64 1621 | 1619,JPN,61 1622 | 1620,JPN,27 1623 | 1621,CHN,50 1624 | 1622,GER,18 1625 | 1623,GBR,28 1626 | 1624,IND,26 1627 | 1625,GER,24 1628 | 1626,USA,27 1629 | 1627,IND,43 1630 | 1628,FRA,47 1631 | 1629,USA,39 1632 | 1630,IND,61 1633 | 1631,USA,52 1634 | 1632,FRA,38 1635 | 1633,RUS,29 1636 | 1634,RUS,49 1637 | 1635,GBR,32 1638 | 1636,FRA,30 1639 | 1637,GBR,62 1640 | 1638,RUS,40 1641 | 1639,RUS,28 1642 | 1640,USA,61 1643 | 1641,IND,59 1644 | 1642,CHN,43 1645 | 1643,GER,63 1646 | 1644,FRA,31 1647 | 1645,GER,25 1648 | 1646,FRA,50 1649 | 1647,IND,49 1650 | 1648,USA,60 1651 | 1649,RUS,42 1652 | 1650,IND,45 1653 | 1651,IND,38 1654 | 1652,RUS,58 1655 | 1653,IND,34 1656 | 1654,CHN,59 1657 | 1655,GBR,41 1658 | 1656,FRA,25 1659 | 1657,RUS,56 1660 | 1658,CHN,39 1661 | 1659,CHN,37 1662 | 1660,GER,31 1663 | 1661,CHN,38 1664 | 1662,RUS,44 1665 | 1663,RUS,27 1666 | 1664,IND,20 1667 | 1665,JPN,45 1668 | 1666,FRA,52 1669 | 1667,FRA,38 1670 | 1668,USA,52 1671 | 1669,GBR,46 1672 | 1670,RUS,27 1673 | 1671,USA,63 1674 | 1672,IND,42 1675 | 1673,CHN,37 1676 | 1674,GBR,56 1677 | 1675,FRA,30 1678 | 1676,GBR,48 1679 | 1677,JPN,23 1680 | 1678,RUS,60 1681 | 1679,CHN,25 1682 | 1680,USA,23 1683 | 1681,JPN,59 1684 | 1682,JPN,54 1685 | 1683,FRA,65 1686 | 1684,GBR,65 1687 | 1685,RUS,53 1688 | 1686,JPN,31 1689 | 1687,USA,29 1690 | 1688,GER,44 1691 | 1689,GBR,30 1692 | 1690,JPN,32 1693 | 1691,RUS,24 1694 | 1692,USA,49 1695 | 1693,GBR,35 1696 | 1694,GER,24 1697 | 1695,CHN,18 1698 | 1696,JPN,48 1699 | 1697,JPN,22 1700 | 1698,USA,47 1701 | 1699,FRA,47 1702 | 1700,USA,60 1703 | 1701,USA,60 1704 | 1702,USA,41 1705 | 1703,JPN,62 1706 | 1704,IND,27 1707 | 1705,CHN,51 1708 | 1706,JPN,53 1709 | 1707,GER,19 1710 | 1708,GER,60 1711 | 1709,JPN,39 1712 | 1710,RUS,31 1713 | 1711,JPN,58 1714 | 1712,GBR,38 1715 | 1713,RUS,40 1716 | 1714,IND,59 1717 | 1715,RUS,28 1718 | 1716,USA,52 1719 | 1717,GER,63 1720 | 1718,USA,55 1721 | 1719,GER,64 1722 | 1720,GBR,32 1723 | 1721,FRA,42 1724 | 1722,GER,22 1725 | 1723,FRA,35 1726 | 1724,JPN,50 1727 | 1725,IND,45 1728 | 1726,IND,43 1729 | 1727,IND,21 1730 | 1728,RUS,61 1731 | 1729,RUS,46 1732 | 1730,USA,30 1733 | 1731,USA,29 1734 | 1732,RUS,25 1735 | 1733,CHN,37 1736 | 1734,IND,48 1737 | 1735,USA,34 1738 | 1736,JPN,25 1739 | 1737,USA,45 1740 | 1738,IND,62 1741 | 1739,GBR,28 1742 | 1740,IND,36 1743 | 1741,FRA,65 1744 | 1742,IND,53 1745 | 1743,USA,22 1746 | 1744,USA,42 1747 | 1745,IND,48 1748 | 1746,IND,42 1749 | 1747,GER,39 1750 | 1748,RUS,44 1751 | 1749,IND,41 1752 | 1750,GER,18 1753 | 1751,JPN,58 1754 | 1752,CHN,49 1755 | 1753,RUS,19 1756 | 1754,GBR,25 1757 | 1755,JPN,52 1758 | 1756,GER,55 1759 | 1757,GER,28 1760 | 1758,USA,18 1761 | 1759,FRA,65 1762 | 1760,RUS,53 1763 | 1761,CHN,18 1764 | 1762,GBR,47 1765 | 1763,CHN,60 1766 | 1764,IND,38 1767 | 1765,FRA,52 1768 | 1766,FRA,58 1769 | 1767,GBR,56 1770 | 1768,JPN,41 1771 | 1769,GER,20 1772 | 1770,USA,31 1773 | 1771,IND,58 1774 | 1772,FRA,38 1775 | 1773,JPN,38 1776 | 1774,FRA,27 1777 | 1775,JPN,63 1778 | 1776,IND,32 1779 | 1777,RUS,19 1780 | 1778,CHN,58 1781 | 1779,FRA,40 1782 | 1780,RUS,19 1783 | 1781,RUS,42 1784 | 1782,GER,37 1785 | 1783,IND,48 1786 | 1784,USA,40 1787 | 1785,GBR,39 1788 | 1786,CHN,59 1789 | 1787,FRA,23 1790 | 1788,USA,22 1791 | 1789,USA,41 1792 | 1790,CHN,24 1793 | 1791,CHN,19 1794 | 1792,USA,62 1795 | 1793,GER,42 1796 | 1794,JPN,35 1797 | 1795,USA,32 1798 | 1796,CHN,53 1799 | 1797,GBR,39 1800 | 1798,GBR,48 1801 | 1799,JPN,52 1802 | 1800,GER,39 1803 | 1801,FRA,37 1804 | 1802,CHN,34 1805 | 1803,GER,24 1806 | 1804,IND,51 1807 | 1805,IND,61 1808 | 1806,CHN,60 1809 | 1807,FRA,25 1810 | 1808,CHN,46 1811 | 1809,GER,62 1812 | 1810,GBR,21 1813 | 1811,IND,57 1814 | 1812,GBR,18 1815 | 1813,GER,36 1816 | 1814,FRA,31 1817 | 1815,FRA,21 1818 | 1816,CHN,41 1819 | 1817,USA,58 1820 | 1818,IND,27 1821 | 1819,USA,45 1822 | 1820,RUS,23 1823 | 1821,FRA,32 1824 | 1822,JPN,35 1825 | 1823,GER,45 1826 | 1824,JPN,65 1827 | 1825,RUS,58 1828 | 1826,JPN,43 1829 | 1827,JPN,31 1830 | 1828,GER,44 1831 | 1829,JPN,26 1832 | 1830,FRA,64 1833 | 1831,CHN,18 1834 | 1832,USA,61 1835 | 1833,JPN,46 1836 | 1834,GER,37 1837 | 1835,CHN,56 1838 | 1836,JPN,61 1839 | 1837,GBR,19 1840 | 1838,FRA,54 1841 | 1839,IND,55 1842 | 1840,JPN,20 1843 | 1841,GBR,25 1844 | 1842,GBR,24 1845 | 1843,IND,34 1846 | 1844,USA,64 1847 | 1845,GER,19 1848 | 1846,IND,48 1849 | 1847,JPN,50 1850 | 1848,RUS,20 1851 | 1849,GBR,44 1852 | 1850,RUS,62 1853 | 1851,GBR,56 1854 | 1852,FRA,48 1855 | 1853,CHN,60 1856 | 1854,RUS,30 1857 | 1855,RUS,42 1858 | 1856,GBR,39 1859 | 1857,JPN,24 1860 | 1858,RUS,44 1861 | 1859,GBR,33 1862 | 1860,CHN,33 1863 | 1861,GER,50 1864 | 1862,GBR,54 1865 | 1863,GBR,54 1866 | 1864,USA,46 1867 | 1865,GBR,50 1868 | 1866,FRA,19 1869 | 1867,RUS,42 1870 | 1868,CHN,63 1871 | 1869,CHN,56 1872 | 1870,FRA,42 1873 | 1871,IND,49 1874 | 1872,USA,58 1875 | 1873,FRA,55 1876 | 1874,JPN,60 1877 | 1875,FRA,45 1878 | 1876,GER,38 1879 | 1877,CHN,37 1880 | 1878,JPN,58 1881 | 1879,FRA,21 1882 | 1880,GER,42 1883 | 1881,GER,37 1884 | 1882,GBR,57 1885 | 1883,USA,25 1886 | 1884,JPN,27 1887 | 1885,GER,41 1888 | 1886,CHN,63 1889 | 1887,USA,26 1890 | 1888,RUS,46 1891 | 1889,GER,37 1892 | 1890,GBR,35 1893 | 1891,CHN,49 1894 | 1892,IND,54 1895 | 1893,FRA,32 1896 | 1894,GER,51 1897 | 1895,FRA,20 1898 | 1896,IND,20 1899 | 1897,FRA,19 1900 | 1898,GBR,26 1901 | 1899,RUS,45 1902 | 1900,CHN,50 1903 | 1901,GBR,37 1904 | 1902,FRA,24 1905 | 1903,USA,40 1906 | 1904,GBR,63 1907 | 1905,RUS,62 1908 | 1906,IND,37 1909 | 1907,CHN,50 1910 | 1908,GBR,22 1911 | 1909,GBR,58 1912 | 1910,FRA,43 1913 | 1911,JPN,64 1914 | 1912,GER,36 1915 | 1913,CHN,56 1916 | 1914,CHN,20 1917 | 1915,FRA,23 1918 | 1916,RUS,24 1919 | 1917,GER,33 1920 | 1918,RUS,50 1921 | 1919,FRA,65 1922 | 1920,CHN,27 1923 | 1921,USA,19 1924 | 1922,FRA,58 1925 | 1923,GBR,19 1926 | 1924,IND,29 1927 | 1925,GBR,65 1928 | 1926,CHN,43 1929 | 1927,FRA,26 1930 | 1928,IND,20 1931 | 1929,JPN,28 1932 | 1930,IND,53 1933 | 1931,CHN,19 1934 | 1932,GBR,32 1935 | 1933,GER,53 1936 | 1934,IND,62 1937 | 1935,GER,59 1938 | 1936,USA,61 1939 | 1937,CHN,49 1940 | 1938,RUS,19 1941 | 1939,JPN,56 1942 | 1940,RUS,63 1943 | 1941,GBR,50 1944 | 1942,USA,60 1945 | 1943,FRA,65 1946 | 1944,JPN,55 1947 | 1945,IND,51 1948 | 1946,USA,23 1949 | 1947,GBR,63 1950 | 1948,USA,63 1951 | 1949,GBR,18 1952 | 1950,GER,21 1953 | 1951,FRA,63 1954 | 1952,GBR,38 1955 | 1953,FRA,47 1956 | 1954,IND,63 1957 | 1955,CHN,21 1958 | 1956,FRA,62 1959 | 1957,IND,45 1960 | 1958,IND,19 1961 | 1959,IND,42 1962 | 1960,JPN,22 1963 | 1961,IND,27 1964 | 1962,GBR,59 1965 | 1963,FRA,55 1966 | 1964,RUS,42 1967 | 1965,FRA,58 1968 | 1966,FRA,28 1969 | 1967,JPN,31 1970 | 1968,RUS,45 1971 | 1969,GBR,33 1972 | 1970,IND,18 1973 | 1971,IND,20 1974 | 1972,USA,37 1975 | 1973,RUS,61 1976 | 1974,JPN,25 1977 | 1975,FRA,20 1978 | 1976,FRA,26 1979 | 1977,JPN,30 1980 | 1978,CHN,39 1981 | 1979,JPN,59 1982 | 1980,GBR,56 1983 | 1981,RUS,26 1984 | 1982,USA,25 1985 | 1983,GBR,33 1986 | 1984,USA,39 1987 | 1985,GBR,24 1988 | 1986,JPN,34 1989 | 1987,FRA,55 1990 | 1988,JPN,20 1991 | 1989,CHN,41 1992 | 1990,USA,32 1993 | 1991,FRA,63 1994 | 1992,FRA,18 1995 | 1993,GBR,61 1996 | 1994,CHN,30 1997 | 1995,IND,64 1998 | 1996,FRA,48 1999 | 1997,JPN,36 2000 | 1998,FRA,36 2001 | 1999,IND,32 2002 | 2000,RUS,39 2003 | 2001,GER,55 2004 | 2002,USA,19 2005 | 2003,FRA,49 2006 | 2004,JPN,18 2007 | 2005,JPN,43 2008 | 2006,GBR,29 2009 | 2007,GER,64 2010 | 2008,FRA,18 2011 | 2009,IND,65 2012 | 2010,CHN,51 2013 | 2011,CHN,26 2014 | 2012,RUS,41 2015 | 2013,IND,33 2016 | 2014,RUS,25 2017 | 2015,GER,51 2018 | 2016,IND,29 2019 | 2017,FRA,50 2020 | 2018,FRA,35 2021 | 2019,USA,27 2022 | 2020,FRA,50 2023 | 2021,GER,47 2024 | 2022,IND,42 2025 | 2023,JPN,63 2026 | 2024,IND,63 2027 | 2025,GBR,22 2028 | 2026,IND,41 2029 | 2027,USA,59 2030 | 2028,FRA,31 2031 | 2029,CHN,56 2032 | 2030,JPN,39 2033 | 2031,CHN,57 2034 | 2032,GER,25 2035 | 2033,FRA,18 2036 | 2034,USA,50 2037 | 2035,GBR,50 2038 | 2036,CHN,32 2039 | 2037,IND,50 2040 | 2038,USA,21 2041 | 2039,JPN,60 2042 | 2040,GBR,54 2043 | 2041,IND,29 2044 | 2042,GBR,35 2045 | 2043,USA,46 2046 | 2044,CHN,65 2047 | 2045,GBR,29 2048 | 2046,GBR,64 2049 | 2047,GBR,45 2050 | 2048,FRA,39 2051 | 2049,GBR,53 2052 | 2050,FRA,62 2053 | 2051,IND,63 2054 | 2052,IND,30 2055 | 2053,JPN,46 2056 | 2054,RUS,32 2057 | 2055,GER,53 2058 | 2056,GBR,52 2059 | 2057,IND,26 2060 | 2058,GER,33 2061 | 2059,IND,46 2062 | 2060,USA,38 2063 | --------------------------------------------------------------------------------