
378
■
24
章 データベースと
SQL
)
最初の
1
文字ごとの友人の数は次のように表現します。
def first_letter_of_name(row: Row) -> str:
return row["name"][0] if row["name"] else ""
def average_num_friends(rows: List[Row]) -> float:
return sum(row["num_friends"] for row in rows) / len(rows)
def enough_friends(rows: List[Row]) -> bool:
return average_num_friends(rows) > 1
avg_friends_by_letter = (
users
.select(additional_columns={'first_letter' : first_letter_of_name})
.group_by(group_by_columns=['first_letter'],
aggregates={"avg_num_friends" : average_num_friends},
having=enough_friends)
)
そして
user_id
の合計は次のように表現します。
def sum_user_ids(rows: List[Row]) -> int:
return sum(row["user_id"] for row in ...