47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
import sqlite3
|
|
from sqlite3 import Error
|
|
import pandas as pd
|
|
pd.set_option('display.max_columns',10)
|
|
|
|
connection = sqlite3.connect("HW2_Q1")
|
|
connection.text_factory = str
|
|
|
|
data = pd.read_csv("Q1/popular_board_game.csv")
|
|
data.to_sql("popular_board_game", connection, if_exists = "replace")
|
|
|
|
sql = """
|
|
|
|
select a.category,
|
|
a.group_category,
|
|
a.total_game_count,
|
|
b.name,
|
|
a.avg_rating,
|
|
a.avg_playtime
|
|
from (
|
|
select category,
|
|
case when min_players > 1 then "Not Support Solo" else "Support Solo" end as group_category,
|
|
count(distinct name) as total_game_count,
|
|
round(avg(avg_rating),2) as avg_rating,
|
|
round(avg(playtime_num),2) as avg_playtime
|
|
from popular_board_game
|
|
group by 1,2
|
|
) a
|
|
|
|
left join (
|
|
select *
|
|
from (
|
|
select category,
|
|
case when min_players > 1 then "Not Support Solo" else "Support Solo" end as group_category,
|
|
name,
|
|
rank() over (partition by category, case when min_players > 1 then "Not Support Solo" else "Support Solo" end order by num_ratings desc) as rn
|
|
from popular_board_game
|
|
) where rn = 1
|
|
|
|
) b on a.category = b.category and a.group_category = b.group_category
|
|
order by 1,2
|
|
"""
|
|
|
|
results = pd.read_sql_query(sql,connection)
|
|
print(results)
|
|
results.to_csv("Q1/popular_board_game_results.csv")
|