Created
April 20, 2026 21:41
-
-
Save nikokozak/f7fcee158ace389571b626c8e7536695 to your computer and use it in GitHub Desktop.
ex3_kozak.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Exercise #3\n", | |
| "\n", | |
| "In this assignment, you'll exercise your SQL query skills.\n", | |
| "\n", | |
| "## The scenario\n", | |
| "\n", | |
| "In the year 20XX, I have won the lottery and decided to leave my programming days behind me in order to pursue my true calling as a [cat café](https://en.wikipedia.org/wiki/Cat_caf%C3%A9) tycoon. I've stored information about my cats and cafés in [this SQLite database](catcafes.db), which you should download and put in the same directory as this file.\n", | |
| "\n", | |
| "The following cell loads the JupySQL extension and the cat cafés database:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "The sql extension is already loaded. To reload it, use:\n", | |
| " %reload_ext sql\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%load_ext sql\n", | |
| "%sql sqlite:///catcafes.db\n", | |
| "import pandas, matplotlib" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Because I'm focused on taking care of cats and scouting out new café locations, I need some help querying the database. And that's what you're going to do in this notebook! Let's take a look at the structure of the database.\n", | |
| "\n", | |
| "There are three tables:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>Name</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>cafe</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>cat</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>cat_cafe</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+----------+\n", | |
| "| Name |\n", | |
| "+----------+\n", | |
| "| cafe |\n", | |
| "| cat |\n", | |
| "| cat_cafe |\n", | |
| "+----------+" | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%sqlcmd tables" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The `cafe` table lists all of the cafés in my growing cat café empire. Each café has a name, a ZIP code, and a unique ID number:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>type</th>\n", | |
| " <th>nullable</th>\n", | |
| " <th>default</th>\n", | |
| " <th>primary_key</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>id</td>\n", | |
| " <td>INTEGER</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>name</td>\n", | |
| " <td>VARCHAR(40)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>zipcode</td>\n", | |
| " <td>VARCHAR(5)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+---------+-------------+----------+---------+-------------+\n", | |
| "| name | type | nullable | default | primary_key |\n", | |
| "+---------+-------------+----------+---------+-------------+\n", | |
| "| id | INTEGER | True | None | 1 |\n", | |
| "| name | VARCHAR(40) | True | None | 0 |\n", | |
| "| zipcode | VARCHAR(5) | True | None | 0 |\n", | |
| "+---------+-------------+----------+---------+-------------+" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%sqlcmd columns -t cafe" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The `cat` table contains information about every cat who currently lives in one of my cafés. Each cat has a unique ID, a name, its weight in pounds, its fur color, and the pattern of the fur. If you're interested, [read more on the interesting topic of cat coat genetics](https://en.wikipedia.org/wiki/Cat_coat_genetics)." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>type</th>\n", | |
| " <th>nullable</th>\n", | |
| " <th>default</th>\n", | |
| " <th>primary_key</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>id</td>\n", | |
| " <td>INTEGER</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>name</td>\n", | |
| " <td>VARCHAR(40)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>weight</td>\n", | |
| " <td>NUMERIC(10, 2)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>color</td>\n", | |
| " <td>VARCHAR(40)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>pattern</td>\n", | |
| " <td>VARCHAR(40)</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+---------+----------------+----------+---------+-------------+\n", | |
| "| name | type | nullable | default | primary_key |\n", | |
| "+---------+----------------+----------+---------+-------------+\n", | |
| "| id | INTEGER | True | None | 1 |\n", | |
| "| name | VARCHAR(40) | True | None | 0 |\n", | |
| "| weight | NUMERIC(10, 2) | True | None | 0 |\n", | |
| "| color | VARCHAR(40) | True | None | 0 |\n", | |
| "| pattern | VARCHAR(40) | True | None | 0 |\n", | |
| "+---------+----------------+----------+---------+-------------+" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%sqlcmd columns -t cat" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Finally, there is a linking table called `cat_cafe` which associates cats to cafés. Each café has a number of cats, and some cats are moved regularly between locations. Thus there is a many-to-many relationship between cats and cafés. The `active` field indicates the cat's current location." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>type</th>\n", | |
| " <th>nullable</th>\n", | |
| " <th>default</th>\n", | |
| " <th>primary_key</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>cat_id</td>\n", | |
| " <td>INTEGER</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>cafe_id</td>\n", | |
| " <td>INTEGER</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>active</td>\n", | |
| " <td>BOOLEAN</td>\n", | |
| " <td>True</td>\n", | |
| " <td>None</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+---------+---------+----------+---------+-------------+\n", | |
| "| name | type | nullable | default | primary_key |\n", | |
| "+---------+---------+----------+---------+-------------+\n", | |
| "| cat_id | INTEGER | True | None | 0 |\n", | |
| "| cafe_id | INTEGER | True | None | 0 |\n", | |
| "| active | BOOLEAN | True | None | 0 |\n", | |
| "+---------+---------+----------+---------+-------------+" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%sqlcmd columns -t cat_cafe" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Thank you for helping out!" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 1: Columns and equals\n", | |
| "\n", | |
| "Modify the query below so that the query returns the names of all tabby cats.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name |\n", | |
| "| --------- |\n", | |
| "| Georges |\n", | |
| "| Scaredy |\n", | |
| "| Charlotte |\n", | |
| "| Minka |\n", | |
| "| Carlos |\n", | |
| "| Chanel |\n", | |
| "| Jiji |\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Georges</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Scaredy</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Charlotte</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Minka</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Carlos</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Chanel</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Jiji</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-----------+\n", | |
| "| name |\n", | |
| "+-----------+\n", | |
| "| Georges |\n", | |
| "| Scaredy |\n", | |
| "| Charlotte |\n", | |
| "| Minka |\n", | |
| "| Carlos |\n", | |
| "| Chanel |\n", | |
| "| Jiji |\n", | |
| "+-----------+" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT name\n", | |
| "FROM cat\n", | |
| "WHERE pattern = 'tabby'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 2: Order and limits\n", | |
| "\n", | |
| "Modify the query below so that it returns the name and zipcode of the cafe whose name comes last in alphabetical order.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name | zipcode |\n", | |
| "|:----------:|:-------:|\n", | |
| "| Tall Tails | 11222 |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>zipcode</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Tall Tails</td>\n", | |
| " <td>11222</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+------------+---------+\n", | |
| "| name | zipcode |\n", | |
| "+------------+---------+\n", | |
| "| Tall Tails | 11222 |\n", | |
| "+------------+---------+" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT name, zipcode\n", | |
| "FROM cafe\n", | |
| "ORDER BY name DESC\n", | |
| "LIMIT 1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 3: Inequality expressions\n", | |
| "\n", | |
| "Modify the query below so that it returns the names of all cats whose coloring is either white or black, and who weight more than 9 lbs, listed in alphabetical order by name.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name |\n", | |
| "| --------- |\n", | |
| "| Charly |\n", | |
| "| Georges |\n", | |
| "| Jack |\n", | |
| "| Jiji |\n", | |
| "| Lafayette |\n", | |
| "| Mimi |\n", | |
| "| Sylvester |\n", | |
| "| Whiskers |\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Charly</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Georges</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Jack</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Jiji</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Lafayette</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Mimi</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Sylvester</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Whiskers</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-----------+\n", | |
| "| name |\n", | |
| "+-----------+\n", | |
| "| Charly |\n", | |
| "| Georges |\n", | |
| "| Jack |\n", | |
| "| Jiji |\n", | |
| "| Lafayette |\n", | |
| "| Mimi |\n", | |
| "| Sylvester |\n", | |
| "| Whiskers |\n", | |
| "+-----------+" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT name\n", | |
| "FROM cat\n", | |
| "WHERE weight > 9 AND (color = \"black\" OR color = \"white\")\n", | |
| "ORDER BY name" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 4: Aggregation and grouping\n", | |
| "\n", | |
| "Modify the SQL statement below so that it returns a list of cat colors along with the weight of the heaviest cat having that color. Only show colors whose heaviest cat weighs more than 10.5 lbs.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| color | max(weight) |\n", | |
| "| -------- | ----------- |\n", | |
| "| brown | 10.88 |\n", | |
| "| cinnamon | 11.37 |\n", | |
| "| lilac | 10.76 |\n", | |
| "| red | 12 |\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>color</th>\n", | |
| " <th>max(weight)</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>brown</td>\n", | |
| " <td>10.88</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>cinnamon</td>\n", | |
| " <td>11.37</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>lilac</td>\n", | |
| " <td>10.76</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>red</td>\n", | |
| " <td>12</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+----------+-------------+\n", | |
| "| color | max(weight) |\n", | |
| "+----------+-------------+\n", | |
| "| brown | 10.88 |\n", | |
| "| cinnamon | 11.37 |\n", | |
| "| lilac | 10.76 |\n", | |
| "| red | 12 |\n", | |
| "+----------+-------------+" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT color, max(weight)\n", | |
| "FROM cat\n", | |
| "GROUP BY color\n", | |
| "HAVING max(weight) > 10.5" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 5: Joins, part 1\n", | |
| "\n", | |
| "Modify the query below so that it shows the name of every tortoiseshell cat along with the `id` field of the café where the cat can currently be found (i.e., the `active` field is true).\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name | cafe_id |\n", | |
| "| --------- | ------- |\n", | |
| "| Luna | 2 |\n", | |
| "| Angel | 4 |\n", | |
| "| Moritz | 2 |\n", | |
| "| O'Malley | 3 |\n", | |
| "| Lafayette | 5 |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>cafe_id</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Luna</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Angel</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Moritz</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>O'Malley</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Lafayette</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-----------+---------+\n", | |
| "| name | cafe_id |\n", | |
| "+-----------+---------+\n", | |
| "| Luna | 2 |\n", | |
| "| Angel | 4 |\n", | |
| "| Moritz | 2 |\n", | |
| "| O'Malley | 3 |\n", | |
| "| Lafayette | 5 |\n", | |
| "+-----------+---------+" | |
| ] | |
| }, | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT cat.name, cat_cafe.cafe_id\n", | |
| "FROM cat\n", | |
| "JOIN cat_cafe ON cat_cafe.cat_id = cat.id\n", | |
| "WHERE cat.pattern = 'tortoiseshell' AND cat_cafe.active = true" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 6: Joins, part 2\n", | |
| "\n", | |
| "The following query is just like the one above, except it shows the name of the café instead of its ID. Add the additional `JOIN` to make the query work.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name | name_1 |\n", | |
| "| --------- | ----------------- |\n", | |
| "| Luna | Independent Claws |\n", | |
| "| Angel | Tall Tails |\n", | |
| "| Moritz | Independent Claws |\n", | |
| "| O'Malley | Paws and Play |\n", | |
| "| Lafayette | Cats Meow |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>name_1</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Luna</td>\n", | |
| " <td>Independent Claws</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Angel</td>\n", | |
| " <td>Tall Tails</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Moritz</td>\n", | |
| " <td>Independent Claws</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>O'Malley</td>\n", | |
| " <td>Paws and Play</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Lafayette</td>\n", | |
| " <td>Cats Meow</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-----------+-------------------+\n", | |
| "| name | name_1 |\n", | |
| "+-----------+-------------------+\n", | |
| "| Luna | Independent Claws |\n", | |
| "| Angel | Tall Tails |\n", | |
| "| Moritz | Independent Claws |\n", | |
| "| O'Malley | Paws and Play |\n", | |
| "| Lafayette | Cats Meow |\n", | |
| "+-----------+-------------------+" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT cat.name, cafe.name\n", | |
| "FROM cat\n", | |
| "JOIN cat_cafe ON cat_cafe.cat_id = cat.id\n", | |
| "JOIN cafe ON cafe.id = cat_cafe.cafe_id\n", | |
| "WHERE cat.pattern = 'tortoiseshell' AND cat_cafe.active = true" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 7: Joins with DISTINCT\n", | |
| "\n", | |
| "Quick, I need to know which zip codes have lilac tabby cats! Fix the query below to give me this information.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| zipcode |\n", | |
| "| ------- |\n", | |
| "| 11215 |\n", | |
| "| 11237 |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>zipcode</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>11215</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>11237</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+---------+\n", | |
| "| zipcode |\n", | |
| "+---------+\n", | |
| "| 11215 |\n", | |
| "| 11237 |\n", | |
| "+---------+" | |
| ] | |
| }, | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT DISTINCT(cafe.zipcode)\n", | |
| "FROM cat\n", | |
| "JOIN cat_cafe ON cat_cafe.cat_id = cat.id\n", | |
| "JOIN cafe ON cafe.id = cat_cafe.cafe_id \n", | |
| "WHERE cat.color = 'lilac' AND cat.pattern = 'tabby' AND cat_cafe.active = true" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 8 (advanced): Joins with aggregation\n", | |
| "\n", | |
| "Okay, time to take off the training wheels. Modify the query below so that it returns the name of each café along with the average weight of all of the cats at that location.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name | avg(cat.weight) |\n", | |
| "| ----------------- | ----------------- |\n", | |
| "| Cats Meow | 9.754999999999999 |\n", | |
| "| Hang In There | 9.254285714285714 |\n", | |
| "| Independent Claws | 9.334545454545456 |\n", | |
| "| Paws and Play | 9.284545454545453 |\n", | |
| "| Tall Tails | 9.817142857142857 |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>avg(cat.weight)</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Cats Meow</td>\n", | |
| " <td>9.754999999999999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Hang In There</td>\n", | |
| " <td>9.254285714285714</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Independent Claws</td>\n", | |
| " <td>9.334545454545456</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Paws and Play</td>\n", | |
| " <td>9.284545454545453</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>Tall Tails</td>\n", | |
| " <td>9.817142857142857</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-------------------+-------------------+\n", | |
| "| name | avg(cat.weight) |\n", | |
| "+-------------------+-------------------+\n", | |
| "| Cats Meow | 9.754999999999999 |\n", | |
| "| Hang In There | 9.254285714285714 |\n", | |
| "| Independent Claws | 9.334545454545456 |\n", | |
| "| Paws and Play | 9.284545454545453 |\n", | |
| "| Tall Tails | 9.817142857142857 |\n", | |
| "+-------------------+-------------------+" | |
| ] | |
| }, | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT cafe.name, avg(cat.weight)\n", | |
| "FROM cafe\n", | |
| "JOIN cat_cafe ON cafe.id = cat_cafe.cafe_id\n", | |
| "JOIN cat ON cat.id = cat_cafe.cat_id\n", | |
| "WHERE cat_cafe.active = true\n", | |
| "GROUP BY cafe.name" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 9 (advanced): Joins with order and limit\n", | |
| "\n", | |
| "Write a query below that returns the name of the café with the most tortoiseshell cats, along with the number of tortoiseshell cats at that location.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "| name | count(cat.name) |\n", | |
| "| ----------------- | --------------- |\n", | |
| "| Independent Claws | 2 |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table>\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>name</th>\n", | |
| " <th>count(cat.name)</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>Independent Claws</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "+-------------------+-----------------+\n", | |
| "| name | count(cat.name) |\n", | |
| "+-------------------+-----------------+\n", | |
| "| Independent Claws | 2 |\n", | |
| "+-------------------+-----------------+" | |
| ] | |
| }, | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "%%sql\n", | |
| "SELECT cafe.name, count(cat.name)\n", | |
| "FROM cat\n", | |
| "JOIN cat_cafe ON cat.id = cat_cafe.cat_id\n", | |
| "JOIN cafe ON cafe.id = cat_cafe.cafe_id\n", | |
| "WHERE cat_cafe.active = true AND cat.pattern = 'tortoiseshell'\n", | |
| "GROUP BY cafe.name\n", | |
| "ORDER BY count(cat.name) DESC\n", | |
| "LIMIT 1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Task 10 (advanced): Pandas integration\n", | |
| "\n", | |
| "Write code in the cell below to show a histogram of cat weights with eight bins. Do this by assigning the result of the query to a variable and fetching the Pandas dataframe.\n", | |
| "\n", | |
| "Expected output:\n", | |
| "\n", | |
| "<img src=\"data:image/png;base64,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\">" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<span style=\"None\">Running query in 'sqlite:///catcafes.db'</span>" | |
| ], | |
| "text/plain": [ | |
| "Running query in 'sqlite:///catcafes.db'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Axes: ylabel='Frequency'>" | |
| ] | |
| }, | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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uuqqYh2M7t27x4knnhhLliwpW3sBgMpS1iCzfv36OPLII+Pmm2/e7uM33HBD3HjjjTF9+vR45plnomfPnjFixIjYuHFjm7cVAKg8ZV008pRTTim27Um9MVOnTo3vfve7MWrUqGLfHXfcEf369St6bs4444w2bi0AUGkqtkbmlVdeiddff724nNSoT58+ceyxx8bcuXN3+LpNmzZFXV1dsw0AaJ8qNsikEJOkHpgtpfuNj21PbW1tEXgat4EDB5a8rQBAeVRskGmpiRMnxpo1a5q2lStXlrtJAEC1BZn+/fsXt2+88Uaz/el+42Pb07Vr1+jdu3ezDQBonyo2yAwePLgILLNmzWral+pd0uilT3/602VtGwBQGco6amndunWxdOnSZgW+L7zwQuy+++4xaNCguOiii+Laa6+N/fffvwg2V155ZTHnzOjRo8vZbACgQpQ1yMybNy+GDx/edP+SSy4pbseOHRu33357fOc73ynmmvmXf/mXWL16dQwbNiwefvjh6NatWxlbDQBUig4NacKWdixdjkqjl1Lhr3oZqlHNhIeiPVs2eWS5mwCU8fu7YmtkAADejyADAGRLkAEAsiXIAADZEmQAgGwJMgBAtgQZACBbggwAkC1BBgDIliADAGRLkAEAsiXIAADZEmQAgGwJMgBAtgQZACBbggwAkC1BBgDIliADAGRLkAEAsiXIAADZEmQAgGwJMgBAtgQZACBbggwAkC1BBgDIVudyNwDgo6iZ8FC7PoHLJo8sdxOgoumRAQCyJcgAANkSZACAbAkyAEC2BBkAIFuCDACQLUEGAMiWIAMAZEuQAQCyJcgAANkSZACAbAkyAEC2BBkAIFuCDACQLUEGAMiWIAMAZEuQAQCyJcgAANkSZACAbAkyAEC2BBkAIFuCDACQLUEGAMiWIAMAZEuQAQCyJcgAANkSZACAbFV0kNm8eXNceeWVMXjw4OjevXsMGTIkrrnmmmhoaCh30wCACtA5Ktj1118f06ZNixkzZsShhx4a8+bNi3HjxkWfPn3iggsuKHfzAIAyq+gg8/TTT8eoUaNi5MiRxf2ampq4++6749lnny130wCAClDRl5aOO+64mDVrVixevLi4v3DhwpgzZ06ccsopO3zNpk2boq6urtkGALRPFd0jM2HChCKIHHTQQdGpU6eiZua6666LMWPG7PA1tbW1MWnS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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "cat_weights = %sql SELECT weight FROM cat\n", | |
| "df = pandas.DataFrame(cat_weights)\n", | |
| "df.plot.hist(bins=8)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Great work! You're hired." | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.14.4" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment