Add promotional campaign evaluation
This commit is contained in:
Binary file not shown.
6
env.yml
6
env.yml
@@ -2,11 +2,11 @@ name: capstone-project
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- pip
|
||||
- python=3.13
|
||||
- pynvim
|
||||
- pytest
|
||||
- pip
|
||||
- jupyter
|
||||
- mysql-connector-python
|
||||
- pynvim
|
||||
- pip:
|
||||
- ruff
|
||||
- basedpyright
|
||||
|
||||
216
promotional_campaign.ipynb
Normal file
216
promotional_campaign.ipynb
Normal file
@@ -0,0 +1,216 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "3228e84e-083c-48f6-9913-9d96e2fd0a2a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Promotional campaign"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "71a559ef-75a7-4aca-86aa-10629e047222",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Imports"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "8fe32f7f-09b3-4d9a-af26-4146c500bf44",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from decimal import Decimal\n",
|
||||
"from mysql.connector import CMySQLConnection, Error, connect\n",
|
||||
"from mysql.connector.cursor_cext import CMySQLCursor"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "70da0c3b-ae18-4b60-a7eb-1c0c75c3677a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Task 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "ac95c33d-3ead-4dab-b007-4f20d37f7386",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"connection = connect(\n",
|
||||
" user=\"tobias\",\n",
|
||||
" unix_socket=\"/run/mysqld/mysqld.sock\",\n",
|
||||
" database=\"LittleLemonDB\",\n",
|
||||
" use_pure=False,\n",
|
||||
" autocommit=True,\n",
|
||||
")\n",
|
||||
"assert isinstance(connection, CMySQLConnection)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "19e74d2d-2b40-4a1b-a57e-38f27106220b",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Task 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "1b386dae-78e4-44db-90e5-6da378de16fe",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Tables:\n",
|
||||
" Addresses\n",
|
||||
" Bookings\n",
|
||||
" Customers\n",
|
||||
" Employees\n",
|
||||
" MenuItems\n",
|
||||
" OrderItems\n",
|
||||
" Orders\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"try:\n",
|
||||
" with connection.cursor() as cursor:\n",
|
||||
" assert isinstance(cursor, CMySQLCursor)\n",
|
||||
"\n",
|
||||
" _ = cursor.execute(\"show tables\")\n",
|
||||
" print(\"Tables:\")\n",
|
||||
" for (table_name,) in cursor:\n",
|
||||
" print(f\" {table_name}\")\n",
|
||||
"except Error as err:\n",
|
||||
" print(err)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "62e2485b-1391-4fc6-aa73-35d0ebd8e95d",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Task 3\n",
|
||||
"**SQL query in `sql/promotional_campaign.sql`:**\n",
|
||||
"```sql\n",
|
||||
"select\n",
|
||||
" C.FirstName,\n",
|
||||
" C.LastName,\n",
|
||||
" C.PhoneNumber,\n",
|
||||
" C.EmailAddress,\n",
|
||||
" max(O.BillAmount) as MaxBillAmount\n",
|
||||
"from Orders as O\n",
|
||||
"inner join Bookings as B on O.BookingID = B.BookingID\n",
|
||||
"inner join Customers as C on B.CustomerID = C.CustomerID\n",
|
||||
"group by C.CustomerID\n",
|
||||
"having MaxBillAmount > 60.00;\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "214d0b0e-dd5b-4113-b6d7-aca020655ef3",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"Customers that placed an order greater then 60.00€:\n",
|
||||
" Li Wei Zhang\n",
|
||||
" Minimum bill amount: 82.50€\n",
|
||||
" Phone number: +86123456789\n",
|
||||
" Email address: li.wei.zhang@example.com\n",
|
||||
" Ivanov Petrov\n",
|
||||
" Minimum bill amount: 150.50€\n",
|
||||
" Phone number: +70987654321\n",
|
||||
" Email address: ivanov.petrov@example.com\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"with open(\"./sql/promotional_campaign.sql\") as promo_campaign_file:\n",
|
||||
" promo_campain_request = promo_campaign_file.read()\n",
|
||||
" \n",
|
||||
"try:\n",
|
||||
" with connection.cursor() as cursor:\n",
|
||||
" assert isinstance(cursor, CMySQLCursor)\n",
|
||||
" _ = cursor.execute(promo_campain_request)\n",
|
||||
"\n",
|
||||
" print()\n",
|
||||
"\n",
|
||||
" print(\"Customers that placed an order greater then 60.00€:\")\n",
|
||||
" for (\n",
|
||||
" first_name,\n",
|
||||
" last_name,\n",
|
||||
" phone_number,\n",
|
||||
" email_address,\n",
|
||||
" min_bill_amount,\n",
|
||||
" ) in cursor:\n",
|
||||
" assert isinstance(first_name, str)\n",
|
||||
" assert isinstance(last_name, str)\n",
|
||||
" assert isinstance(phone_number, str)\n",
|
||||
" assert isinstance(email_address, str | None)\n",
|
||||
" assert isinstance(min_bill_amount, Decimal)\n",
|
||||
" print(f\" {first_name} {last_name}\")\n",
|
||||
" print(f\" Minimum bill amount: {min_bill_amount}€\")\n",
|
||||
" print(f\" Phone number: {phone_number}\")\n",
|
||||
" if email_address:\n",
|
||||
" print(f\" Email address: {email_address}\")\n",
|
||||
"except Error as err:\n",
|
||||
" print(err)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "be3c702d-5ab6-47a6-a19b-4e26aefdbd6e",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Cleanup"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"id": "e7f0a6dc-4940-4f8b-a89c-e714e9d375ba",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"connection.close()"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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.13.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
11
sql/promotional_campaign.sql
Normal file
11
sql/promotional_campaign.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
select
|
||||
C.FirstName,
|
||||
C.LastName,
|
||||
C.PhoneNumber,
|
||||
C.EmailAddress,
|
||||
max(O.BillAmount) as MaxBillAmount
|
||||
from Orders as O
|
||||
inner join Bookings as B on O.BookingID = B.BookingID
|
||||
inner join Customers as C on B.CustomerID = C.CustomerID
|
||||
group by C.CustomerID
|
||||
having MaxBillAmount > 60.00;
|
||||
Reference in New Issue
Block a user