計算不重複的資料
如同影片所提,SQLAlchemy 的 func 模組可使用內建的 SQL 函式,讓像是計數與加總這類操作更快且更有效率。
在影片中,Jason 使用 func.sum() 取得 census 的 pop2008 欄位的「總和」,如下所示:
select([func.sum(census.columns.pop2008)])
如果你想改為「計算」pop2008 中值的個數,可以像這樣使用 func.count():
select([func.count(census.columns.pop2008)])
此外,如果你只想計算 pop2008 的「不重複」值數量,可以使用 .distinct() 方法:
select([func.count(census.columns.pop2008.distinct())])
在本練習中,你會練習使用 func.count() 與 .distinct(),來取得 census 中州別的不重複數量。
到目前為止,你已看過在 ResultProxy 上使用 .fetchall()、.fetchmany() 與 .first() 來取得結果。ResultProxy 也有一個名為 .scalar() 的方法,適合用於只回傳單一列與單一欄的查詢,以直接取得其值。
這在你只是在查詢計數或加總時特別實用。
本練習屬於課程
Python 資料庫入門
練習說明
- 建立一個
select陳述式,用來「計算」census的state欄位中「不重複」值的數量。 - 執行
stmt取得計數,並將結果儲存為distinct_state_count。 - 印出
distinct_state_count的值。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Build a query to count the distinct states values: stmt
stmt = select([____])
# Execute the query and store the scalar result: distinct_state_count
distinct_state_count = connection.execute(____).scalar()
# Print the distinct_state_count
print(____)