diff --git a/solution.ipynb b/solution.ipynb
new file mode 100644
index 0000000..2fd8686
--- /dev/null
+++ b/solution.ipynb
@@ -0,0 +1,409 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "cff74a9f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 1\n",
+ "\n",
+ "import pandas as pd\n",
+ "from sqlalchemy import create_engine, text\n",
+ "\n",
+ "\n",
+ "password = \"IronHack2025!\"\n",
+ "db_name = \"sakila\"\n",
+ "\n",
+ "\n",
+ "connection_string = f'mysql+pymysql://root:{password}@localhost:3306/{db_name}'\n",
+ "\n",
+ "\n",
+ "engine = create_engine(connection_string)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "74102cb9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#2\n",
+ "\n",
+ "def rentals_month(engine, month, year):\n",
+ "\n",
+ " query = text(f\"SELECT * FROM rental WHERE MONTH(rental_date) = {month} AND YEAR(rental_date) = {year}\")\n",
+ "\n",
+ " with engine.connect() as connection:\n",
+ " result = connection.execute(query) \n",
+ " df = pd.DataFrame(result.all())\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "f515c2a2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(1156, 7)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " rental_id | \n",
+ " rental_date | \n",
+ " inventory_id | \n",
+ " customer_id | \n",
+ " return_date | \n",
+ " staff_id | \n",
+ " last_update | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 2005-05-24 22:53:30 | \n",
+ " 367 | \n",
+ " 130 | \n",
+ " 2005-05-26 22:04:30 | \n",
+ " 1 | \n",
+ " 2006-02-15 21:30:53 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 2005-05-24 22:54:33 | \n",
+ " 1525 | \n",
+ " 459 | \n",
+ " 2005-05-28 19:40:33 | \n",
+ " 1 | \n",
+ " 2006-02-15 21:30:53 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 2005-05-24 23:03:39 | \n",
+ " 1711 | \n",
+ " 408 | \n",
+ " 2005-06-01 22:12:39 | \n",
+ " 1 | \n",
+ " 2006-02-15 21:30:53 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 2005-05-24 23:04:41 | \n",
+ " 2452 | \n",
+ " 333 | \n",
+ " 2005-06-03 01:43:41 | \n",
+ " 2 | \n",
+ " 2006-02-15 21:30:53 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 2005-05-24 23:05:21 | \n",
+ " 2079 | \n",
+ " 222 | \n",
+ " 2005-06-02 04:33:21 | \n",
+ " 1 | \n",
+ " 2006-02-15 21:30:53 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " rental_id rental_date inventory_id customer_id \\\n",
+ "0 1 2005-05-24 22:53:30 367 130 \n",
+ "1 2 2005-05-24 22:54:33 1525 459 \n",
+ "2 3 2005-05-24 23:03:39 1711 408 \n",
+ "3 4 2005-05-24 23:04:41 2452 333 \n",
+ "4 5 2005-05-24 23:05:21 2079 222 \n",
+ "\n",
+ " return_date staff_id last_update \n",
+ "0 2005-05-26 22:04:30 1 2006-02-15 21:30:53 \n",
+ "1 2005-05-28 19:40:33 1 2006-02-15 21:30:53 \n",
+ "2 2005-06-01 22:12:39 1 2006-02-15 21:30:53 \n",
+ "3 2005-06-03 01:43:41 2 2006-02-15 21:30:53 \n",
+ "4 2005-06-02 04:33:21 1 2006-02-15 21:30:53 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "df_result = rentals_month(engine, 5, 2005)\n",
+ "\n",
+ "\n",
+ "print(df_result.shape)\n",
+ "\n",
+ "df_result.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "6eea9d4a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rental_count_month (df, month,year):\n",
+ " rental_count = df.groupby('customer_id')[['rental_id']].count()\n",
+ "\n",
+ " column_name = f'rentals_{month}_{year}'\n",
+ " rental_count = rental_count.rename(columns={'rental_id':column_name})\n",
+ "\n",
+ " return rental_count"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "7433326c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " rentals_5_2005 | \n",
+ "
\n",
+ " \n",
+ " | customer_id | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " rentals_5_2005\n",
+ "customer_id \n",
+ "1 2\n",
+ "2 1\n",
+ "3 2\n",
+ "5 3\n",
+ "6 3"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_result1 = rental_count_month(df_result, 5, 2005)\n",
+ "df_result1.head()\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "e53fa45e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 3\n",
+ "def compare_rentals(df1, df2):\n",
+ " \n",
+ " df_merge = df1.merge(df2,left_index=True, right_index=True, how='inner')\n",
+ "\n",
+ " df_merge['difenece'] = df_merge.iloc[:,1]- df_merge.iloc[:,0]\n",
+ " \n",
+ " return df_merge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "4a26bd12",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " rentals_5_2005 | \n",
+ " rentals_6_2005 | \n",
+ " difenece | \n",
+ "
\n",
+ " \n",
+ " | customer_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 7 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 3 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " rentals_5_2005 rentals_6_2005 difenece\n",
+ "customer_id \n",
+ "1 2 7 5\n",
+ "2 1 1 0\n",
+ "3 2 4 2\n",
+ "5 3 5 2\n",
+ "6 3 4 1"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "df_jun = rentals_month(engine, 6, 2005)\n",
+ "\n",
+ "\n",
+ "df_count_jun= rental_count_month(df_jun, 6, 2005)\n",
+ "\n",
+ "df_comparasion = compare_rentals(df_result1, df_count_jun)\n",
+ "\n",
+ "df_comparasion.head()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "base",
+ "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.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}