87 lines
4.2 KiB
Python
87 lines
4.2 KiB
Python
from Controllers.Postgres.engine import get_db, Base
|
|
from Controllers.Postgres.schema import (
|
|
User,
|
|
Order,
|
|
Product,
|
|
Supplier,
|
|
ShippingAddress,
|
|
Category,
|
|
)
|
|
from sqlalchemy import func
|
|
import time
|
|
|
|
|
|
with get_db() as session:
|
|
start_time = time.time()
|
|
# Product table analysis
|
|
max_price = session.query(func.max(Product.price)).scalar()
|
|
min_price = session.query(func.min(Product.price)).scalar()
|
|
avg_price = session.query(func.avg(Product.price)).scalar()
|
|
print(f"product_prices Product Prices - Max: {max_price}, Min: {min_price}, Average: {avg_price}")
|
|
|
|
# Supplier table analysis
|
|
max_rating = session.query(func.max(Supplier.rating)).scalar()
|
|
min_rating = session.query(func.min(Supplier.rating)).scalar()
|
|
avg_rating = session.query(func.avg(Supplier.rating)).scalar()
|
|
print(f"supplier_ratings Supplier Ratings - Max: {max_rating}, Min: {min_rating}, Average: {avg_rating}")
|
|
|
|
# User table analysis
|
|
max_balance = session.query(func.max(User.account_balance)).scalar()
|
|
min_balance = session.query(func.min(User.account_balance)).scalar()
|
|
avg_balance = session.query(func.avg(User.account_balance)).scalar()
|
|
print(f"user_balances User Balances - Max: {max_balance}, Min: {min_balance}, Average: {avg_balance}")
|
|
|
|
# Order table analysis
|
|
max_order_amount = session.query(func.max(Order.order_date)).scalar()
|
|
min_order_amount = session.query(func.min(Order.total_amount)).scalar()
|
|
avg_order_amount = session.query(func.avg(Order.total_amount)).scalar()
|
|
print(f"order_amounts Order Amounts - Max: {max_order_amount}, Min: {min_order_amount}, Average: {avg_order_amount}")
|
|
# Example complex joins
|
|
|
|
# Join User with Preferred Category and Last Ordered Product
|
|
user_category_product = session.query(User.username, Category.name.label('preferred_category'), Product.name.label('last_product')) \
|
|
.join(Category, User.preferred_category_id == Category.id) \
|
|
.join(Product, User.last_ordered_product_id == Product.id) \
|
|
.all()
|
|
|
|
print("\nUsers, their Preferred Category, and Last Ordered Product:")
|
|
for user, category, product in user_category_product[0:5]:
|
|
print(f"user_category_product User: {user}, Preferred Category: {category}, Last Product: {product}")
|
|
|
|
# Join User with Orders and Shipping Address
|
|
user_orders_shipping = session.query(User.username, Order.total_amount, ShippingAddress.city) \
|
|
.join(Order, User.id == Order.user_id) \
|
|
.join(ShippingAddress, Order.shipping_address_id == ShippingAddress.id) \
|
|
.all()
|
|
print("\n Users, their Order Amounts, and Shipping City:")
|
|
for user, amount, city in user_orders_shipping[0:5]:
|
|
print(f"user_orders_shipping User: {user}, Order Amount: {amount}, Shipping City: {city}")
|
|
|
|
# Join User with Preferred Category and Supplier Rating
|
|
user_category_supplier = session.query(User.username, Category.name.label('preferred_category'), Supplier.rating.label('supplier_rating')) \
|
|
.join(Category, User.preferred_category_id == Category.id) \
|
|
.join(Supplier, User.supplier_rating_id == Supplier.id) \
|
|
.all()
|
|
print("\nUsers, their Preferred Category, and Supplier Rating:")
|
|
for user, category, rating in user_category_supplier[0:5]:
|
|
print(f"user_category_supplier User: {user}, Preferred Category: {category}, Supplier Rating: {rating}")
|
|
|
|
left_join_result = session.query(User.username, Category.name.label('preferred_category')) \
|
|
.outerjoin(Category, User.preferred_category_id == Category.id) \
|
|
.all()
|
|
|
|
print("\nLeft Outer Join (All Users and their Preferred Categories):")
|
|
for user, category in left_join_result[0:5]:
|
|
print(f"left_join_result User: {user}, Preferred Category: {category}")
|
|
|
|
right_join_result = session.query(User.username, Category.name.label('preferred_category')) \
|
|
.outerjoin(User, Category.id == User.preferred_category_id) \
|
|
.all()
|
|
|
|
print("\nRight Outer Join (All Categories and the Users who Prefer Them):")
|
|
for user, category in right_join_result[0:5]:
|
|
print(f"right_join_result Category: {category}, User: {user}")
|
|
|
|
end_time = time.time()
|
|
print(f"Total time taken: {end_time - start_time} seconds")
|
|
|